处理多个按钮单击侦听器

Posted

技术标签:

【中文标题】处理多个按钮单击侦听器【英文标题】:Handle multiple button click listeners 【发布时间】:2011-12-02 20:52:58 【问题描述】:

我的布局中有两个 ImageButton,“加号”和“减号”。 我在“加号”按钮上附加了一个点击监听器,在点击函数中带有一条简单的 toast 消息,它可以工作。

    ImageButton btplus = (ImageButton)findViewById(R.id.btplus);        
    btplus.setOnClickListener( new ImageButton.OnClickListener()
        @Override
        public void onClick(View v) 
            Toast.makeText(getApplicationContext(), "+", Toast.LENGTH_SHORT);
        
    );

然后我将第二个点击监听器附加到减号 ImageButton...

    ImageButton btminus = (ImageButton)findViewById(R.id.btminus);
    btminus.setOnClickListener( new ImageButton.OnClickListener()
        @Override
        public void onClick(View v) 
            Toast.makeText(getApplicationContext(), "-", Toast.LENGTH_SHORT);
        
    );

...没有更多的按钮点击工作! “加号”点击也停止工作。

我看过很多关于这个主题的例子,但我看不出它们(工作)和我的有什么区别。

【问题讨论】:

只需将 ImageButton.onClickListener() 更改为 View.onClickListener() 并在 toast 方法的末尾添加 .show() 。 Like = Toast.makeText(getApplicationContext(), "-", Toast.LENGTH_SHORT).show(); @ChiragRaval 您应该将其发布为答案。 @Audrius 感谢您的 cmets。我认为如果仅通过添加简单的 cmets 即可解决任何问题,则无需发布答案。 【参考方案1】:
 ImageButton btplus = (ImageButton)findViewById(R.id.btplus);        
    btplus.setOnClickListener( new View.OnClickListener()
        @Override
        public void onClick(View v) 
            Toast.makeText(getApplicationContext(), "+", Toast.LENGTH_SHORT).show();
        
    );

【讨论】:

【参考方案2】:

如多按钮点击监听器...

 ImageButton btminus = (ImageButton)findViewById(R.id.btminus);
 btminus.setOnClickListener(this);

 ImageButton btplus = (ImageButton)findViewById(R.id.btplus);
 btplus.setOnClickListener(this);

那么您的活动想要实现 onclicklistener 并且您实现的方法是:

    public void onClick(View v) 
        switch (v.getId()) 
        case R.id.btplus:
            Toast.makeText(getApplicationContext(), "Plus is clicked" + "+", Toast.LENGTH_SHORT).show(); 
            break;
        case R.id.btminus:
            Toast.makeText(getApplicationContext(),"Minus is clicked" + "-", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
        
    

【讨论】:

谢谢,我知道这种方法,但我更喜欢保留单独的功能:我只需要那个“.show()”【参考方案3】:

在 XML 布局中注册 onClick 事件,然后在代码中处理。我会这样做:

<Button
android:id="@+id/btplus"
android:layout_
android:layout_
android:text="Click me"
android:onClick="onBtnClicked">
</Button>

.class 中的方法

 public void onBtnClicked(View v) 
        switch (v.getId()) 
        case R.id.btplus:
            Toast.makeText(getApplicationContext(), "Plus is clicked" + "+", Toast.LENGTH_SHORT).show(); 
            break;
        case R.id.btminus:
            Toast.makeText(getApplicationContext(),"Minus is clicked" + "-", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
        
    

【讨论】:

以上是关于处理多个按钮单击侦听器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Shiny eventReactive 处理程序中侦听多个事件表达式

为多个事件侦听器调用反射方法C#

如何将事件侦听器添加到多个按钮,每个按钮修改数据的不同部分

为啥 jQuery 单击事件侦听器未在 WooCommerce 按钮上注册?

单击列表视图中自定义单元格中按钮的侦听器

单击android小部件按钮上的侦听器