0

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

4

2 回答 2

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();
于 2013-04-10T09:49:33.947 回答
0

R.id.filterName 位于哪里?

它位于 dialog_create_filter 中吗?

然后你应该只在你膨胀对话框并使用 dialog_layout 视图作为父视图之后调用 findViewById 。

还可以在这里查看: Android“最佳实践”从对话框返回值

希望这会有所帮助,亚龙

于 2013-04-10T09:58:52.963 回答