一个用于多个按钮的onclickhandler
-
05-10-2019 - |
题
我发现自己一直在做这样的事情:
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属性将其设置在布局XML中。
android:onClick="onClick"
然后在您的活动类中添加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"
至少需要SDK 1.6。因此,如果您希望您的应用程序可以尽可能大的受众访问,则可能希望使用Android 1.6编写应用程序。除非您的应用需要仅在1.6+中可用的功能。因此,尽管您的第一次尝试更多地工作,但它具有更大的后退兼容性。我通常会以您的方式进行操作,以使我的应用程序保持1.5 comptaible。
编辑:如果您将Android 2.2设置为项目设置中的SDK,则很容易忽略此内容,但是将MINSDK版本设置为3(1.5),因为它没有给出编译器错误。
我认为,如果您的按钮不在活动而是在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);
}
如果您想为单击侦听器执行更少的代码,您将拥有此lib [http://jakewharton.github.io/butterknife/
你只需要这样做
@OnClick({ R.id.button1, R.id.button2, R.id.button3 })
public void doSomething(View button) {
//do whatever you want
button.changeWhateverInTheView();
}
不隶属于 StackOverflow