sinat_23870319
sinat_23870319
2016-02-13 04:35
采纳率: 0%
浏览 1.8k

请问在调用自定义控件的button事件时会有空指针错误

出错的代码如下,是菜单中的按钮事件,点击就会出现空指针错误。如果把setOnClickListener注释掉就不会出错。请问各位为什么会报错呢?代码如下。

 public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){
        case 1:
             LayoutInflater inflater = getLayoutInflater();
             View layout = inflater.inflate(R.layout.tel_dialog,
                     (ViewGroup) findViewById(R.id.dialog));
             AlertDialog.Builder builder = new AlertDialog.Builder(this);
             builder.setTitle("拨打电话");
             builder.setIcon(android.R.drawable.ic_dialog_info);
             builder.setView(layout);
             tel = (EditText)findViewById(R.id.telNum);
             dialing = (Button)findViewById(R.id.dialing);
             cancel = (Button)findViewById(R.id.cancel);

             dialing.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    String telNum = tel.getText().toString();
                    Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+telNum));
                    startActivity(intent);
                }

             });

             cancel.setOnClickListener(new OnClickListener(){

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                    }

                 });

             builder.show();
            break;
        case 2:
            MainActivity.this.finish();
            break;
        }

        return true;
    }

不胜感激!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 91program
    91program 2016-02-13 05:45

    为了程序的健壮性,在使用前最好判断一下是否为空?
    为空的原因,需要进一步判断:是偶尔出现,还是必现?如果是必现,则应该控件ID的原因;如果是偶尔出现,可能是程序中其它代码有问题导致的,如:越界。

    点赞 评论
  • leilba
    林深 2016-02-13 07:47

    我想你应该要这样来获取菜单界面上面的控件

    tel = (EditText)layout.findViewById(R.id.telNum);
    dialing = (Button)layout.findViewById(R.id.dialing);
    cancel = (Button)layout.findViewById(R.id.cancel);
    

    如果我想得没错的话这几个控件都是layout这个view里面的

    点赞 评论
  • fk002008
    lambda-fk 2016-02-13 09:23

    空指针错误
    dialing.setOnClickListener
    cancel.setOnClickListener

    那就是上面这2个对象是null
    没有取出来这2个对象

    点赞 评论

相关推荐