所以我在活动中有一个弹出窗口的代码如下:
private void initiatePopupWindow(String popupText, boolean hasEditText){
LayoutInflater inflater = (LayoutInflater) PlayActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View layout= inflater.inflate(R.layout.popup_layout, (ViewGroup) findViewById(R.id.popup_layout));
final PopupWindow popupWindow= new PopupWindow(layout, 300, 370, true);
findViewById(R.id.play_activity_layout).post(new Runnable() {
@Override
public void run() {
popupWindow.showAtLocation(layout, Gravity.CENTER, 0, 0);
}
});
TextView textPopup= (TextView) layout.findViewById(R.id.tvPopupText);
textPopup.setText(popupText);
if(hasEditText) {
EditText et = (EditText) findViewById(R.id.etNumber);
MAX_NUMBER_OF_MOVES = Integer.parseInt(et.getText().toString());
}
btnClosePopup= (Button) layout.findViewById(R.id.btnClosePopup);
btnClosePopup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popupWindow.dismiss();
//finish();
}
});
}
我得到此行的NullPointerException:
MAX_NUMBER_OF_MOVES = Integer.parseInt(et.getText().toString());
我试图通过在网站上搜索想法来解决这个问题,但仍然不知道为什么它不合适。
编辑:
我的popup_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/popup_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#444444"
android:orientation="vertical"
android:padding="10sp" >
<TextView
android:id="@+id/tvPopupText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5sp"
android:text="@string/under_construction"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"/>
<Button
android:id="@+id/btnClosePopup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/ok"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/etNumber"
android:inputType="number"
android:layout_alignRight="@+id/tvPopupText"/>
</RelativeLayout>
答案 0 :(得分:2)
我认为你必须使用
EditText et = (EditText) layout.findViewById(R.id.etNumber);
请参阅layout.
缺失。
请注意,getText()
永远不会返回null。所以只有findViewById
才会引发NullPointerException。
答案 1 :(得分:1)
尝试改变这一点:
final View layout= inflater.inflate(R.layout.popup_layout, (ViewGroup) findViewById(R.id.popup_layout));
另一个:
// container = get it from param of onCreateView
final View layout= inflater.inflate(R.layout.popup_layout, container);
...
EditText et = (EditText) layout.findViewById(R.id.etNumber);
答案 2 :(得分:0)
在您修复layout.findViewById ....
之后将EditText初始化为某个默认值...请参阅android:text =&#34; 0&#34;以下
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/etNumber"
android:inputType="number"
android:layout_alignRight="@+id/tvPopupText"
android:text="0"
/>
如果string_value不是有效数字,你还应该总是在try / catch块中包装Integer.parseInt(&#34; string_value&#34;):
try {
MAX_NUMBER_OF_MOVES = Integer.parseInt(et.getText().toString());
}
catch (NumberFormatException nfe_) {
MAX_NUMBER_OF_MOVES = 5; // Or whatever your default number should be
}