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?

War es hilfreich?

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();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top