Ein OnClick-Handler für mehrere Buttons
-
05-10-2019 - |
Frage
Ich finde mich Dinge wie diese die ganze Zeit tun:
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);
...
und
private OnClickListener myButtonListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button1 :
...
Gibt es einen besseren Weg, um die OnClickListener zu setzen?
Lösung
Sie können es auch in Ihrem Layout xml gesetzt mit dem Android:. Onclick-Attribut
android:onClick="onClick"
Dann in Ihrer Aktivitätsklasse fügen Sie die OnClick-Methode.
public void onClick(View v) {
...
Hier ist die Dokumentation .
Andere Tipps
Haben Sie Ihre Klasse implementieren `View.OnClickListener‘, wie
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 Antwort, können Sie einfach so etwas wie:
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
}
};
Es ist zu beachten, dass
android:onclick="onClick"
erfordert mindestens Andoid SDK 1.6. Also, wenn Sie möchten, dass Ihre App als großes Publikum wie möglich zugänglich sein, möchten Sie wahrscheinlich Ihre App gegen Android 1.6 schreiben. Es sei denn, Ihre App erfordert eine Funktion, die in 1.6+ verfügbar ist. Während also der erste Versuch etwas mehr Arbeit ist, hat es mehr Abwärtskompatibilität. Ich kann es in der Regel tun, um die Art und Weise Sie das tun, meine Apps zu halten 1,5 comptaible.
Edit: Es ist einfach, diese zu übersehen, wenn Sie Android 2.2 als SDK in Ihren Projekten Einstellungen einrichten, aber minSDK Version 3 (1.5) eingestellt, da es nicht Compiler-Fehler nicht geben.
Ich denke, im Falle, wenn Ihre Tasten nicht in Aktivität sind aber in FragmentDialog usw. Auf diese Weise können
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);
}
Wenn Sie klicken Zuhörer weniger Code tun wollen, müssen Sie diese lib [ http: // jakewharton. github.io/butterknife/]
Sie müssen nur tun, um diese
@OnClick({ R.id.button1, R.id.button2, R.id.button3 })
public void doSomething(View button) {
//do whatever you want
button.changeWhateverInTheView();
}