我正在尝试从对话框中获取返回值并继续获取NPE。我有一个活动,屏幕上有一个按钮。单击该按钮时,将显示一个模式,其中包含要填写的几个字段。当我试图将信息反馈给主要活动时,我的NPE爆炸了。这是代码:
public class FilterActivity extends Activity {
final Context context = this;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_filter);
Button addFilter = (Button) findViewById(R.id.addFilter);
addFilter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final EditText et = (EditText) findViewById(R.id.filterName);
LayoutInflater inflater = LayoutInflater.from(context);
View dialog_layout = inflater.inflate(
R.layout.dialog_create_filter, null);
AlertDialog.Builder db = new AlertDialog.Builder(
FilterActivity.this);
db.setView(dialog_layout);
db.setTitle("Create Filter");
db.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface d, int which) {
et.getText().toString();
}
});
db.show();
}
});
}
}
当我尝试从中获取值时,EditText(et)仍为null。我究竟做错了什么?感谢。
答案 0 :(得分:1)
您必须添加db.findViewById(R.id.filterName);
,如下所示
final EditText et = (EditText) db.findViewById(R.id.filterName);
而不是
final EditText et = (EditText) findViewById(R.id.filterName);
完整代码:
LayoutInflater inflater = LayoutInflater.from(context);
View dialog_layout = inflater.inflate(
R.layout.dialog_create_filter, null);
AlertDialog.Builder db = new AlertDialog.Builder(
FilterActivity.this);
db.setView(dialog_layout);
final EditText et = (EditText) db.findViewById(R.id.filterName);
db.setTitle("Create Filter");
db.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface d, int which) {
et.getText().toString();
}
});
db.show();
答案 1 :(得分:0)
R.id.filterName在哪里?
它位于dialog_create_filter?
然后你应该在膨胀对话框并使用dialog_layout视图作为父对象之后调用findViewById。
另请看这里: Android “Best Practice” returning values from a dialog
希望这有帮助,Yaron