2014-01-07 76 views
0

我知道1个按钮,它是:添加点击监听器到多个按钮?

Button buttonOne = (Button) findViewById(R.id.button1); 
buttonOne.setOnClickListener(new Button.OnClickListener() { 
    public void onClick(View v) { 
     //Do stuff here 
    } 
}); 

如果我有多个按钮?这是什么时候按下任何按钮的一般方法?

+3

我建议你学习Java基础知识。 – Emmanuel

+0

不,每个按钮都有自己的监听器 –

+0

更具体的问题是什么? –

回答

0

每个按钮都有自己的监听器,但当然你可以调用所有听众的公共方法在同一类

例如

Button buttonOne = (Button) findViewById(R.id.button1); 
buttonOne.setOnClickListener(new Button.OnClickListener() { 
    public void onClick(View v) { 
    //Do stuff here 
    doStuff (v); 
    } 
}); 
+0

“每个按钮都有自己的侦听器”不一定,它们只存储对实现特定侦听器接口的对象的引用,_could_可以是代码中的匿名类的实例,但不必(请参阅@ nexus_2006的答案) 。 –

1

而是一个匿名类的,你可以在一个内部类实现View.OnClickListener,实例化,并使用它像这样所有按钮;其中handleButton1/2()是您父级活动中的方法。

private class MyEventListener implements View.OnClickListener { 
    @Override 
    public void onClick(View view) { 
     switch (view.getId()) { 
      case R.id.button1_id: 
      handleButton1(); 
      break; 
      case R.id.button2_id: 
      handleButton2(); 
      break; 
     } 
    } 
} 

内部主要活动的onCreate():

OnClickListener mMyEventListener = new MyEventListener(); 
button1.setOnClickListener(mMyEventListener); 
button2.setOnClickListener(mMyEventListener); 

我喜欢这个,因为我可以与壳体块内类似的行为组按钮,或我可以实现相同的对象上的多个接口,以便所有的我的UI交互/回调可以很容易地跟踪位置,而不是以几十个匿名监听器类的形式重复出现的代码。例如,如果我有一个列表视图并将mMyEventListener传递给ListView.setOnItemClick,我可以扩展AdapterView.OnItemClickListener

相关问题