Android:调用Twice时setOnClickListener不起作用

时间:2014-11-29 08:39:46

标签: java android

我使用setOnClickListener在两个方法中聆听imageButton上的点击事件,但是在我的另一个方法中没有触发,我的第一个听众解雇了但是我的第二个听众不会开火请看我的代码:

Class FirstActivity extends BaseActivity
{
    @Override
    public void onCreate()
    {
        super.onCreate();
        this.methodA();
        this.methodB();
    }
    public void methodA()
    {
        ImageButton imageButton = (ImageButton) RContextHelper.getActivity().findViewById(R.id.my_location_button);
        imageButton.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
                //event firing when image button touched
            }
        });
    }

    public void methodB()
    {
        Test test = new Test(this);
        test.methodA();
    }
}
class Test
{
    Context con;
    public Test(Context con)
    {
        this.con = con;
    }
    public void methodA()
    {
        ImageButton imageButton = (ImageButton) getActivity().findViewById(R.id.my_location_button);
        imageButton.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
                //event does not fire when image button touched
            }
        });
    }
    protected ActionBarActivity getActivity()
    {
        return (ActionBarActivity) con;
    }
}

2 个答案:

答案 0 :(得分:1)

您可以从名称setOnClickListener 设置中猜出新的侦听器,替换旧的侦听器。 Java中的所有set*侦听器都是这种情况。如果是addOnClickListener那么您可以预期应该调用listeners

如果要同时调用它们,可以在单击侦听器上编写复合并将两个侦听器添加到它,并将复合侦听器设置为目标。

class CompositeListener implements OnEventListener {
   private List<OnEventListener> registeredListeners = new ArrayList<OnEventListener>();

   public void registerListener (OnEventListener listener) {
      registeredListeners.add(listener);
   }

   public void onEvent(Event e) {
      for(OnEventListener listener:registeredListeners) {
         listener.onEvent(e);
      }
   }
}

然后:

CompositeListener composite = new CompositeListener();
composite.registerListener(listener1);
composite.registerListener(listener2);
imageButton.setOnEventListener(composite);

Source

答案 1 :(得分:0)

使用两个methodA函数进行编码非常困惑。你永远不会打第二个。至少你没有显示代码。而且 - 正如已经说过的那样 - 只能有一个听众。

相关问题