7
votes

Comment faire plusieurs boutons et OnClickListener

J'ai dans la touche 16 S (Numéros, plus, moins, etc.) dans mon fichier XML de mise en page.

Je me demande comment vérifier quel bouton a été enfoncé.

Mon idée est que je ferai pour chaque bouton Utilisez onclick () méthode mais cette méthode est un peu impraticement, car j'aurai 16 de ces onclick () Méthodes une pour chaque bouton.

Y a-t-il un moyen plus élégant?


1 commentaires

6 Réponses :


2
votes

Vous n'avez pas à mentionner 16 sur les auditeurs click. Créez un et joignez-le à chaque bouton. OnClick () Méthode obtient une vue comme paramètre. Cette vue est votre bouton. Vérifiez simplement que c'est ID ou nom.


0 commentaires

6
votes

Vous pouvez utiliser un gestionnaire que vous ne définissez pas comme classe intérieure anonyme, mais dans une classe distincte. onclick () obtiendra la vue passée et vous pouvez en choisir. xxx

puis dans votre layout.xml vient de mettre pour chaque bouton xxx


0 commentaires

4
votes

Bien sûr. Créez un tableau de votre Button-IDS CODE> et attribuez-leur le même écouteur (une implémentation de View.onClickListener code> définie comme classe distincte, pas comme classe anonyme) dans une boucle. Dans l'auditeur, vous pouvez vérifier qui est le bouton pressé (en comparant le paramètre code> code> dans onclick () code> méthode).

Activité: p>

int id = view.getId();
switch (id)
{
case ...:
// Do stuff
case ...:
// Do different stuff
}


0 commentaires

19
votes

Vous pouvez les traiter tous dans une seule classe qui implémente OnClickListener ou dans la classe d'activité si vous aimez ...

import android.view.View.OnClickListener;

   public class MyActivity extends Activity implements OnClickListener {

      @Override public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         Button buttonA = (Button) findViewById(R.id.buttonA);    
         buttonA.setOnClickListener(this);
         Button buttonB = (Button) findViewById(R.id.buttonB); 
         buttonB.setOnClickListener(this);
      }

   //etc... etc...

   public void onClick(View v) {

      switch (v.getId()) {
         case R.id.buttonA: 
          // do something
          break;
         case R.id.buttonB:
          // do something else
          break;
      }
   }

}


1 commentaires

Merci pour vos allusions, les gars. J'ai essayé de faire comment montrer @ user433579, mais j'arrive toujours après avoir exécuté mon application dans l'erreur d'émulateur "Désolé! - Cette application Calc (processus com.tsk.calc) s'est arrêté de manière inattendue. S'il vous plaît essayez à nouveau." Où pourrait être un problème? Il existe un fichier pour les défauts de journal ou quelque chose de similaire?



2
votes
import android.view.View.OnClickListener;

public class MyActivity extends Activity implements OnClickListener {

  @Override public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     Button buttonA = (Button) findViewById(R.id.buttonA);    
     Button buttonB = (Button) findViewById(R.id.buttonB); 
     buttonA.setOnClickListener(this);
     buttonB.setOnClickListener(this);
  }

  public void onClick(View v) {
    if(v==buttonA)
    {
        do something...
    }
    if(v==buttonB)
    {
        do something...
    }
}

0 commentaires

0
votes

Je fais habituellement quelque chose comme ceci: xxx

initier les boutons avec un numéro d'identification à la classe principale, comme celui-ci: xxx

Ceci est soigné si vous avez un grand nombre de boutons tels que vous le souhaitez et que vous souhaitez utiliser le même auditeur pour tous. Bravo!


0 commentaires