在按钮上实现多个单击侦听器

时间:2011-11-07 09:11:15

标签: android events routes event-bubbling

我正在开发一个应用程序,它要求我在按钮上实现多个单击侦听器。我被卡住了。经过一番搜索,我只遇到了一些可以实现这一目标的黑客攻击。

然而在这种情况下,有些不适用,因为在我的应用程序中,逻辑是如果单击按钮并满足条件,则第二个侦听器被调用触发另一个事件。

这看起来很棘手。有没有人有任何想法?

感谢。

4 个答案:

答案 0 :(得分:2)

而不是制作另一个侦听器,只需根据条件调用不同的函数,而不是从唯一的侦听器调用。

答案 1 :(得分:1)

您可以使用以下方式满足您的要求:

设置全局变量说int condition_number=0;

然后,

mButton.setOnClickListener(new OnClickListener)
{    
     performThis(condition_number);
}

perforThis(int number)
{
   switch(number) 
   {
       case 1:
              //do some stuff for condition 1
              //set condition_number accordingly,relatively to what you want to perform next
              performThis(codition_number);
              break;

       case 2:
              //do some stuff for condition 2
              //set condition_number accordingly,relatively to what you want to perform next
              performThis(codition_number);
              break;

       case 3:
              //do some stuff for condition 3
              //set condition_number accordingly,relatively to what you want to perform next
              performThis(codition_number);
              break;

       default:
               //do something
               break;
   }
}

这样,您就可以针对不同的条件调用不同的代码片段,并根据需要反复调用它们而不会产生冲突。

您可以设置一个案例,只需将break放在那里即可完成此方法的执行。

答案 2 :(得分:0)

在这个帖子上尝试这个检查过的答案,也许这就是你要找的东西 - Keeping multiple OnClickListeners in one class

答案 3 :(得分:0)

正如影子所指出的那样,你可以这样做:

您的XML布局:

<Button
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:text="@string/doStuff"
     android:onClick="doStuff" />

在您的活动中:

function void doStuff(View target) {
   listener1(target);
   listener2(target);
   ...
}

function void listener1(View target) {
   ...
}

function void listener2(View target) {
   ...
}

然后在listener1,listener2等中实现多个侦听器......