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

来源:互联网 发布:ibm软件测试招聘 编辑:程序博客网 时间:2024/06/05 11:54

今天自定义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.ibtnAddNumberimageButton.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
Dialog对话框,例子对应第一个EditText
看这样就获取成功啦
看这样获取成功啦

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

0 0
原创粉丝点击