Android中Dialog数据的获取报错空指针问题

今天自定义Dialog,目的是需要在Dialog中输入EditText然后获取数据传递到需要的地方,最初的方法:

OnCreat()方法中初始化view控件,然后使用.getText()来获取,这是平常我们所用的方法,也很简单就不多说了

然而是一直报错:java.lang.NullPointerException: Attempt to invoke virtual method空指针问题
很郁闷的查了好久,最后发现了解决方式。

解决思路:这个我们一般上初始化View控件都是在某个Activity的java文件的OnCreat()方法中findViewById()来做的,但是细细想来,你想要获取Dialog中的控件而不是这个Activity的所以找不到出现null错误,去你所加载的那个layout中查找,然后初始化,就可以了。

主要实现代码:

//主Activity,点击imagebutton弹出对话框
public class ControlActivity extends AppCompatActivity {
private ImageButton imageButton;
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_control);
imageButton = (ImageButton) findViewById(R.id.ibtnAddNumber
imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MyDialog.Builder builder = new MyDialog.Builder(ControlActivity.this);
                /**
                ***从这开始找**
                */
                //加载是Dialog的布局,从这个布局里边找他的控件才能找到
                LayoutInflater inflater = getLayoutInflater();
                View layout = inflater.inflate(R.layout.my_dialog, (ViewGroup) findViewById(dialog));
                //*初始化控件,和平时我们找的一样,注意layout.别忘了
                final EditText c_id = (EditText) layout.findViewById(R.id.c_id);
                /**
                *这两个主要点  接下来想做什么,在下边的点击事件中做就好了,这里显示Toast试试吧
                */
                builder.setTitle("添加设置项");
                builder.setContentView(layout);
                builder.setPositiveButton("确定添加",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                            //Toast显示获取的数据  c_id.getText()就是
     Toast.makeText(ControlActivity.this,c_id.getText(),Toast.LENGTH_SHORT).show();
                                dialog.dismiss();
                                addAdapter.notifyDataSetChanged();
                            }
                        });
                builder.setNegativeButton("取消",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
                builder.creat().show();
            }
        });
        }
        }

布局文件什么的就不贴了,很简单一看就明白了。
效果图:
Dialog对话框,例子对应第一个EditText
Android中Dialog数据的获取报错空指针问题_第1张图片
看这样就获取成功啦
Android中Dialog数据的获取报错空指针问题_第2张图片

总结:Dialog对话框的ui异于当前Activity中,所以不能在当前Activity中找,要在他的加载布局中也就是Dialog对话框中找,然后就和平常要做什么的步骤一样了。当然如果定义了其他的自定义控件,也有类似问题,解决思路是一样的。

你可能感兴趣的:(Android问题小笔记)