我使用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;
}
}
答案 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);
答案 1 :(得分:0)
使用两个methodA
函数进行编码非常困惑。你永远不会打第二个。至少你没有显示代码。而且 - 正如已经说过的那样 - 只能有一个听众。