J'ai l'activité:
public class Mtest extends Activity {
Button b1;
Button b2;
public void onCreate(Bundle savedInstanceState) {
...
b1 = (Button) findViewById(R.id.b1);
b2 = (Button) findViewById(R.id.b2);
b1.setOnClickListener(myhandler);
b2.setOnClickListener(myhandler);
...
}
View.OnClickListener myhandler = new View.OnClickListener() {
public void onClick(View v) {
// MY QUESTION STARTS HERE!!!
// IF b1 do this
// IF b2 do this
// MY QUESTION ENDS HERE!!!
}
}
}
Comment vérifier quel bouton a été cliqué?
Réponses:
Vous apprendrez comment le faire, d'une manière simple, est:
Ou, si vous travaillez avec un seul écouteur de clics, vous pouvez faire:
Cependant, je ne recommande pas de le faire de cette façon car vous devrez ajouter un
if
pour chaque bouton que vous utilisez. C'est difficile à maintenir.la source
View
n'est pas unButton
, maisButton
est unView
. Cependant, vous pouvez lancer unView
en unButton
. Gardez à l'esprit que la deuxième façon de le faire n'est pas recommandée ... peut-être que v peut ne pas être un Button, ce qui générera une exception de cast.Ou vous pouvez essayer la même chose mais sans auditeurs. Sur la définition XML de votre bouton:
Et dans votre code définissez la méthode
ButtonOnClick
:la source
if
instructions et d'écouteurs. Les écouteurs sont parfaits si les boutons sont créés au moment de l'exécution, mais ce n'est souvent pas le cas.Fragment
s, car le rappel doit résider dans l'activité (pas le fragment).Je préfère:
Puis:
Switch
-case
est plus facile à maintenir queif
-else
, et cette implémentation ne nécessite pas la création de nombreuses variables de classe.la source
Five Ways to Wire Up an Event Listener est un excellent article présentant les différentes façons de configurer un seul écouteur d'événement. Permettez-moi de développer cela ici pour plusieurs auditeurs.
1. Classe de membre
2. Type d'interface
3. Classe intérieure anonyme
4. Mise en œuvre en activité
5. Attribut dans la disposition de vue pour les événements OnClick
Et en xml:
la source
Si vous ne souhaitez pas enregistrer les instances du bouton 2 dans le code de la classe, suivez cette meilleure méthode (c'est plus clair et rapide !!):
la source
Une autre façon de le faire est un seul auditeur de l'activité, comme ceci:
J'aime le faire avec un IF unique au lieu de switch-else, mais si vous préférez cela, vous devriez le faire:
la source
Le meilleur moyen est de
switch
passer entre v.getId (). Avoir un OnClickListener anonyme séparé pour chaque bouton prend plus de mémoire. Il n'est pas nécessaire de diffuser la vue sur le bouton. L'utilisation de if-else lorsque le commutateur est possible est plus lente et plus difficile à lire. Dans la source d'Android, vous pouvez souvent remarquer la comparaison des références par if-else:Je ne sais pas exactement pourquoi ils ont choisi cette voie, mais cela fonctionne aussi.
la source
utilisez setTag ();
comme ça:
la source
En plus de la réponse de Cristian C (désolé, je n'ai pas la possibilité de faire des commentaires), si vous créez un gestionnaire pour les deux boutons, vous pouvez directement comparer v à b1 et b2, ou si vous souhaitez comparer par l'ID, vous n'ont pas besoin de convertir v en Button (View a également la méthode getId ()), et de cette façon, il n'y a pas de souci d'exception de conversion.
la source
la source
Consultez cet article pour plus de détails
la source