Android findViewById 空指针
Android findViewById null pointer
来自 activity_settings.xml
<EditText android:id="@+id/editText" android:text="text" />
<Button android:id="@+id/button" android:text="button"/>
来自MyActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
this.findViewById(R.id.button).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
EditText txt = (EditText) view.findViewById(R.id.editText);
Toast.makeText(view.getContext(),txt.getText(), Toast.LENGTH_SHORT).show();
}
});
...
如果我点击我得到的按钮
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
只是为了测试我尝试并成功了
@Override
public void onClick(View view) {
EditText txt = (EditText) view.findViewById(R.id.editText);
Toast.makeText(view.getContext(),txt.getText(),Toast.LENGTH_SHORT).show();
}
}
我不明白为什么按钮没问题,但 editText 为空。
您在被点击的 view
上调用 findViewById()
。您的按钮没有 edittext 作为其子项。您应该改为查询 activity 视图层次结构:replace
view.findViewById(R.id.editText)
和
findViewById(R.id.editText)
改变
EditText txt = (EditText) view.findViewById(R.id.editText);
到
EditText txt = (EditText)findViewById(R.id.editText);
您正在查找被单击的视图中的 EditText 控件 - 这显然是按钮。您必须搜索 Activity 的布局文件。
来自 activity_settings.xml
<EditText android:id="@+id/editText" android:text="text" />
<Button android:id="@+id/button" android:text="button"/>
来自MyActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
this.findViewById(R.id.button).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
EditText txt = (EditText) view.findViewById(R.id.editText);
Toast.makeText(view.getContext(),txt.getText(), Toast.LENGTH_SHORT).show();
}
});
...
如果我点击我得到的按钮
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
只是为了测试我尝试并成功了
@Override
public void onClick(View view) {
EditText txt = (EditText) view.findViewById(R.id.editText);
Toast.makeText(view.getContext(),txt.getText(),Toast.LENGTH_SHORT).show();
}
}
我不明白为什么按钮没问题,但 editText 为空。
您在被点击的 view
上调用 findViewById()
。您的按钮没有 edittext 作为其子项。您应该改为查询 activity 视图层次结构:replace
view.findViewById(R.id.editText)
和
findViewById(R.id.editText)
改变
EditText txt = (EditText) view.findViewById(R.id.editText);
到
EditText txt = (EditText)findViewById(R.id.editText);
您正在查找被单击的视图中的 EditText 控件 - 这显然是按钮。您必须搜索 Activity 的布局文件。