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

问题描述

请问在调用自定义控件的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;
    }

不胜感激!

解决方案

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

解决方案二:

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

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

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

解决方案三:

空指针错误
dialing.setOnClickListener
cancel.setOnClickListener

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

时间: 2024-10-25 08:26:03

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

.net中调用隐藏服务器控件button的click事件

问题描述 .net中调用隐藏服务器控件button的click事件 在ASP.NETt中,需要通过JS调用一个服务器按钮控件的click事件调用后台事件,但是如果按钮的display设置为none之后在遨游浏览器可以通过document.getElementByID(""button1"").click()来调用,在IE或者是360浏览器中则调用了,但是没有效果,却也刷新了页面! 解决方案 用fiddler检查下有没有回发产生,看看是不是被360等流氓软件干扰了.

link中能绕开事件直接调用它对应的函数么?请问怎么调用?不想调用事件。

问题描述 link中能绕开事件直接调用它对应的函数么?请问怎么调用?不想调用事件. link中能绕开事件直接调用它对应的函数么?请问怎么调用?不想调用事件. 解决方案 http://www.cnblogs.com/icyJ/p/Reflection.html

c# 如何在button事件中调用

问题描述 如何在button事件中调用下面的代码?publicvoidnotifySelection(refIvcSelectionSelection,intSelectionTypeChange){if(Selection.ItemCount==0){return;}if(Selection.ItemCount>=1){for(inti=0;i<Selection.ItemCount;i++){comp=(IvcComponent)Selection.getItem(i);for(inta=

一个方法里面调用Button事件

问题描述 一个方法里面调用Button事件 解决方案 解决方案二:Button_Click(null,null);解决方案三:引用1楼的回复: Button_Click(null,null); Button_Click(sender,e)呢,(null,null)好还是(sender,e)好?解决方案四:主要是看你Button_Click中代码怎么写的.只要你的sender和e的类型和Button_Click中参数类型一样那就没什么区别解决方案五:引用3楼的回复: 主要是看你Button_Cli

请问如何解决自定义控件自动回传数据的问题

问题描述 请问如何解决自定义控件自动回传数据的问题,实现不用button按钮,可以使控件自定回传数据. 解决方案 解决方案二:WPF的话可以使用"事件通知"方式来做,即,选中checkbox或者输入textbox值都会触发数据更改,并回传数据.解决方案三:可以通过自定事件触发解决方案四:用的是web服务器控件解决方案五:用web服务器控件做的不是WPF,也不是MVC

子窗体事件-C#子窗体调用父窗体的事件

问题描述 C#子窗体调用父窗体的事件 父窗体是wpf界面 子窗体是winform界面 请问如何子窗体调用父窗体的事件,进行刷新子窗体的数据 因为我用的是页面传值,所以必须子窗体调用父窗体的事件,子窗体才能刷新值

jQuery实现自动调用和触发某个事件的方法_jquery

本文实例讲述了jQuery实现自动调用和触发某个事件的方法.分享给大家供大家参考,具体如下: 我以点击事件为例,研究一下这个话题: jQuery 自动触发点击事件 1.比如我们通过jquery定义了一个点击事件,我们如何自动触发他: $(function(){ $('#button').click(function(){ alert('button is clicking!'); }); }) 1)自动触发点击事件 $('#button').click(); 这大大出乎了 我的意料,我以为这样

调用自定义资源-新手求教,请问如何调用resx中的自定义资源,没有金币,谢谢大家

问题描述 新手求教,请问如何调用resx中的自定义资源,没有金币,谢谢大家 如图,我往资源文件FP.zh-Hans.resx里边加了一个key叫"zzz",值是"啦啦啦",请问代码该如何掉用之,请大侠指点一二 解决方案 ResourceManager rm = new ResourceManager("MissionPlanner.GCSViews.FlightPlanner.zh-Hans.resx", System.Reflection.As

请看一个大神写的lambda表达式,不用linq请问怎么调用

问题描述 请看一个大神写的lambda表达式,不用linq请问怎么调用 Func<int, bool> MyAnd(Func<int, bool> f1, Func<int, bool> f2) { return x => f1(x) && f2(x); } 解决方案 直接调用也可以: bool b1 = MyAnd(x => x < 10, x => x % 2 == 0)(4); bool b2 = MyAnd(x =>