2 sinat 23870319 sinat_23870319 于 2016.02.13 12:35 提问

请问在调用自定义控件的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   Ds   Rxr 2016.02.13 13:45

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

leilba
leilba   Rxr 2016.02.13 15: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
fk002008   2016.02.13 17:23

空指针错误
dialing.setOnClickListener
cancel.setOnClickListener

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C#开发学习笔记:编写自定义Button控件的自定义事件
编写自定义Button控件的自定义事件
delphi——自定义事件的实现
下面 实现了两个自定义事件 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) edtcheng1:
wpf给自定义控件定义事件
wpf给自定义控件定义事件 首先项目中添加UserControl.xaml,名称改为MyUserButton.xaml。 修改xaml文件如下: Button x:Class="UserButtonTest.MyUserButton" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation...
<VB.NET>自定义控件传递事件
Public Class Form1     WithEvents TextBoxPluss As TextBox 'WithEvent一个TextBox控件,因为自定义控件中需要传递的事件为TextBox的事件     Private Sub TextBoxPlus_KeyPress(ByVal sender As System.Object, ByVal e As System.Window
C#自定义控件-事件-委托
在组件编程中对事件的理解是十分重要的,C# 中的“事件”是当对象发生某些有趣的事情时,类向该类的客户提供通知的一种方法。与事件联系最为紧密的,个人认为是委托.委托可以将方法引用封装在委托对象内。为了弄清组件-事件-委托三者的关系,本人用实际的例子来谈谈自己的理解。 理解C#编程中的组件-事件-委托     首先创建一个Windows控件项目,添加如下控件样板:     当事件触发时,
Asp.net 问题:点击button时,总是执行pageload事件,然后再执行button的点击事件
原因:button按钮放在了form中,form提交总是默认点击按钮提交,因此点击button时,系统自动提交了form表单调用pageload事件。           因此大部分pageload的代码都是写在not ispostback中。
自定义控件里的keydown方法无法捕获所有的按键消息的处理方法1
自定义控件里的keydown方法无法捕获所有的按键消息的处理方法1(自定义控件里的keydown方法无法获取的键值如 空格键 Space,上下左右键等) 处理办法具体如下: 1、首先在自定义控件UserControl1中重写ProcessDialogKey方法  自定义控件UserControl1中重写ProcessDialogKey方法代码如下:          protect
Winform自定义控件—Button(上)
在开发中用的最多的相信就是Button控件,但是Button本身是在是太丑陋了,自己还背景图还会产生"黑线",为了使用方便,并且美观,我们采用迂回的方式来实现Button的效果。 在这里使用UserControl+Label进行封装 先来看代码: ButtonM.cs 1 using System; 2 using System.ComponentModel; 3 us
在vc中自定义事件扩展控件功能
当MFC所提供的控件不能满足我们的要求时,我们需要为控件进行功能扩展,根据需求自定义控件的事件。 本文以一个扩展按钮的鼠标按下和鼠标松开的事件为例,其它控件事件扩展可遵照该例。提供源代码,在VC6.0中调试成功。 按钮也是一个窗口,继承自CWND,它其中封装了大量的消息,因此我们之需要继承CButton,然后添加我们需要的事件对控件进行扩展即可。 在开发过程中,只需要
WPF自定义控件的事件
写一个WPF的自定义控件,在点击控件中的一个按钮时,需要触发一个事件,使用这个自定义控件的客户,可以订阅这个事件,进行处理。 实现的代码段如下: 1.注册一个路由事件   public static readonly RoutedEvent ClearClickEvent = EventManager.RegisterRoutedEvent (      "ClearClick", R