Question

Je trouve moi-même faire des choses comme ça tout le temps:

    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);
...

et

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

Y at-il une meilleure façon de régler le OnClickListener?

Était-ce utile?

La solution

Vous pouvez également définir dans votre mise en page XML en utilisant l'androïde. Attribut onclick

android:onClick="onClick"

Ensuite, dans votre classe d'activité ajouter la méthode onClick.

public void onClick(View v) {
...

Voici la documentation .

Autres conseils

Demandez à votre classe implémente `View.OnClickListener », comme

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 réponse, vous pouvez tout simplement faire quelque chose comme:

    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
   }
};

Il convient de noter que

android:onclick="onClick"

nécessite au moins Andoid SDK 1.6. Donc, si vous voulez que votre application soit accessible au plus grand public possible, vous voulez probablement écrire votre application contre Android 1.6. À moins que votre application nécessite une fonctionnalité qui est disponible uniquement en 1.6+. Ainsi, alors que votre première tentative est un peu plus de travail, il a une plus grande compatibilité ascendante. Je fais habituellement la façon dont vous le faites, de garder mes applications 1.5 comptaible.

Edit: Il est facile d'oublier cela, si vous configurez Android 2.2 SDK comme dans vos paramètres de projets, mais définir la version minSDK à 3 (1,5), car il ne donne pas d'erreurs compilateur.

Je pense que dans le cas où, lorsque vos boutons ne sont pas en activité mais FragmentDialog, etc., cette aide peut

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);
}

Si vous voulez faire moins de code pour les clics auditeurs vous avez cette lib [ http: // jakewharton. github.io/butterknife/]

il vous suffit de le faire

 @OnClick({ R.id.button1, R.id.button2, R.id.button3 })
public void doSomething(View button) {
    //do whatever you want
    button.changeWhateverInTheView();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top