一个OnClickHandler用于多个button

我发现自己一直在做这样的事情:

Button button1 = (Button) findViewById(R.id.button1); Button button2 = (Button) findViewById(R.id.button2); Button button3 = (Button) findViewById(R.id.button3); button1.setOnClickListener(menuButtonListener); button2.setOnClickListener(menuButtonListener); button3.setOnClickListener(menuButtonListener); ... 

  private OnClickListener myButtonListener = new OnClickListener() { @Override public void onClick(View v) { switch(v.getId()){ case R.id.button1 : ... 

有没有更好的方法来设置OnClickListener?

你也可以使用android:onclick属性在layout xml中设置它。

 android:onClick="onClick" 

然后在你的activity类中添加onClick方法。

 public void onClick(View v) { ... 

这里是文档 。

让你的类实现`View.OnClickListener',就像

 public class MyActivity extends Activity implements View.OnClickListener { Button button1, button2, button3; @Override public void onCreate(Bundle bundle) { super.onCreate(); ... button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); button3 = (Button) findViewById(R.id.button3); button1.setOnClickListener(this); button2.setOnClickListener(this); button3.setOnClickListener(this); } @Override public void onClick(View v) { switch(v.getId()) { case R.id.button1: // do stuff; break; case R.id.button2: // do stuff; break; ... } } 

Gettin @foenix的答案,你可以简单地做一些事情:

  int[] buttons = {R.id.button1, R.id.button2, R.id.button3, R.id.button4, R.id.button5, R.id.button6, R.id.button7 , R.id.button8, R.id.button9}; for (int i = 0; i < buttons.length; i++) { Button buttonNum = (Button) rootView.findViewById(buttons[i]); buttonNum.setOnClickListener(doSomething); } private OnClickListener doSomething= new OnClickListener() { @Override public void onClick(View v) { //doSomething } }; 

应该指出的是,

 android:onclick="onClick" 

至less需要Andoid SDK 1.6。 所以,如果你想让自己的应用程序尽可能地被大量的用户访问,那么你可能想要针对Android 1.6编写应用程序。 除非你的应用程序需要一个只有1.6+的function。 所以,当你的第一次尝试是更多的工作,它有更大的向后兼容性。 我通常按​​照你的方式来做,以保持我的应用程序1.5的可执行性。

编辑:很容易忽略这一点,如果你在你的项目设置中将SDK设置为SDK,但将minSDK版本设置为3(1.5),因为它不会给编译器带来错误。

我认为,如果你的button不在活动,但在FragmentDialog等,这可以帮助

 Context mContext = getActivity().getBaseContext(); mRes = mContext.getResources(); String[] idOfButtons = { "button1", "button2", "button3"}; for (int pos = 0; pos < idOfButtons.length; pos++) { Integer btnId = mRes.getIdentifier(idOfButtons[pos], "id",(getActivity()).getBaseContext().getPackageName()); ImageButton ib = (ImageButton) v.findViewById(btnId); ib.setOnClickListener(this.onClickNum); }