无法为android中的多个按钮调用多个onclick事件

无法为android中的多个按钮调用多个onclick事件,android,button,Android,Button,我在安卓系统中有一个小查询。 我有一个活动,其中有3个按钮,单击一个按钮,我将显示AlertDialog(警报)对话框;单击第二个按钮,我将显示List(列表)对话框;单击第三个按钮,我将在android中切换屏幕键盘 我的问题是,我能够调用第一个按钮,当我单击第二个和第三个按钮时,它们没有响应,而且我通过在相应的单击事件函数上插入断点进行了检查,控制流根本没有进入函数内部。简单地说,它跳过了乐趣,进入了主要OnCreate函数的末尾 这是我用于前两个按钮的代码 Button b

我在安卓系统中有一个小查询。 我有一个活动,其中有3个按钮,单击一个按钮,我将显示AlertDialog(警报)对话框;单击第二个按钮,我将显示List(列表)对话框;单击第三个按钮,我将在android中切换屏幕键盘

我的问题是,我能够调用第一个按钮,当我单击第二个和第三个按钮时,它们没有响应,而且我通过在相应的单击事件函数上插入断点进行了检查,控制流根本没有进入函数内部。简单地说,它跳过了乐趣,进入了主要OnCreate函数的末尾

这是我用于前两个按钮的代码

        Button btn=(Button) findViewById(R.id.button1);
    btn.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            // TODO Auto-generated method stub
            ShowListDialog();
        }
    });

    btn=(Button) findViewById(R.id.btnShowList);
    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            ShowOneDialog();
        }
    });
我正在调用函数ShowOneDialog()和ShowListDialog()函数,希望不需要这些函数 第三个按钮点击事件如下

btn=(按钮)findViewById(R.id.btnToggle); btn.setOnClickListener(新视图.OnClickListener(){


您已将btn设置为button1,因此您只将一个侦听器附加到该按钮,这就是您的另一个按钮没有执行任何操作的原因。

创建一个单独的
OnClickListener
并将此侦听器添加到所有按钮,如下所示:

 Button btn=(Button) findViewById(R.id.button1); 
 Button btn1=(Button) findViewById(R.id.btnShowList);
 ....

 btn.setOnClickListener(buttonclickhandler);
 btn1.setOnClickListener(buttonclickhandler);
 ....

 View.OnClickListener buttonclickhandler = new View.OnClickListener() {
    public void onClick(View v) {
       @Override
        public void onClick(View v)
        {
            // TODO Auto-generated method stub
            switch(v.getId())
            {
            case R.id.button1:ShowListDialog();
                break;
            case R.id.btnShowList: ShowOneDialog();
            break;
            }
        }
    }
  }
试试这个代码

Button btn1=(Button)findViewById(R.id.button1);
btn1.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        // TODO Auto-generated method stub
        ShowListDialog();
    }
});

Button btn2 = (Button)findViewById(R.id.btnShowList);
btn2.setOnClickListener(new View.OnClickListener() {

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

为什么我们不能每次都分配给同一个btn对象?为什么我们不能一直使用同一个对象?我们是否需要为我们在应用程序中使用的每个按钮声明一个单独的对象?@Ganesh:是的,如果您使用同一个按钮实例添加OnClickListener,那么这是不可能的。在这种情况下,总是最后一个按钮单击工作,所以您不需要o创建所有单独的按钮,而不是按钮,并将OnClickListener添加到each@Ganesh:如果这个答案有助于你解决当前的问题,那么请将其标记为正确答案。我在第二行中做的是btn=(按钮)findViewById(R.id.btnShowList);我们不能这样分配吗?我的意思是分配并重新分配一个对象,这样一个对象就足以容纳我们有多少个按钮。我们不能这样做吗?这会在我们的代码中造成任何问题。Vikram请确实查看我上面对代码的注释。为什么我们不能这样做。请务必在注释之前查看。@Ganesh:我们不能这样做方式,因为button的一个对象一次只能附加到一个视图。如果将其附加到另一个视图(button),则上一个视图(button)将丢失,而新添加的按钮将仅在您的情况下保持功能。因此,如果您希望所有按钮同时起作用,则必须创建单独的按钮对象。
 Button btn=(Button) findViewById(R.id.button1); 
 Button btn1=(Button) findViewById(R.id.btnShowList);
 ....

 btn.setOnClickListener(buttonclickhandler);
 btn1.setOnClickListener(buttonclickhandler);
 ....

 View.OnClickListener buttonclickhandler = new View.OnClickListener() {
    public void onClick(View v) {
       @Override
        public void onClick(View v)
        {
            // TODO Auto-generated method stub
            switch(v.getId())
            {
            case R.id.button1:ShowListDialog();
                break;
            case R.id.btnShowList: ShowOneDialog();
            break;
            }
        }
    }
  }
Button btn1=(Button)findViewById(R.id.button1);
btn1.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        // TODO Auto-generated method stub
        ShowListDialog();
    }
});

Button btn2 = (Button)findViewById(R.id.btnShowList);
btn2.setOnClickListener(new View.OnClickListener() {

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