Android对话框中的空指针异常

时间:2013-04-10 09:47:35

标签: android

我正在尝试从对话框中获取返回值并继续获取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。我究竟做错了什么?感谢。

2 个答案:

答案 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

相关问题