Dynamiquement la création de Boutons et de réglage onClickListener
J'ai un problème avec la manipulation de créer dynamiquement des Boutons sur Android. Je suis la création de boutons N et que j'ai à faire la même méthode lorsque le bouton est cliqué, mais je dois savoir sur quel bouton est cliqué.
for (int i = 0; i < NO_BUTTONS; i++){
Button btn = new Button(this);
btn.setId(2000+i);
...
btn.setOnClickListener((OnClickListener) this);
buttonList.addView(btn);
list.add(btn);
Cucurrently, je suis en ajoutant l'ID de chaque bouton et je suis en utilisant la méthode ci-dessous pour voir quel bouton a été cliqué. (ligne btn.setId(2000+i);
et btn.setOnClickListener((OnClickListener) this);
). Cette méthode est également mis en œuvre dans l'activité.
@Override
public void onClick(View v) {
switch (v.getId()){
case 2000: selectButton(0);
break;
...
case 2007: selectButton(7);
break;
}
}
Cela n'a pas l'air bon pour moi, donc je me demande est-il une meilleure façon de le faire? ou comment envoyer de l'information à l'événement onclick? des suggestions?
InformationsquelleAutor Ante | 2010-12-09
Vous devez vous connecter pour publier un commentaire.
Vous pouvez créer une méthode qui retourne un onclickListener et prend un bouton comme un paramètre. Et puis utiliser cette méthode pour définir le onClicklistener dans la première boucle que vous avez..
Mise à jour: code pourrait être soemthing le long de ces lignes:
comme une méthode dans l'activité et ensuite l'utiliser dans la boucle comme ceci
J'en ai trouvé une solution pour ce..
utilisez ce code dans onCreate
après onCreate créer une méthode de type de retour de la Vue.OnClickListener comme ça..
appel de cette auditeur par
btn.setOnClickListener(btnclick);
Afficher les Id ne doit pas être utilisée à ces fins Afficher les Id sont générés sur le temps de compilation en fonction Id défini en xml fichiers de mise en page.
Il suffit de placer votre propre Id dans la setTag() méthode qui est disponible au niveau de la Vue (donc Boutons d'hériter d'eux). Ce "tag" peut être quelque chose qui vous permettent de reconnaître une Vue des autres. Vous récupérer sa valeur avec getTag().
switch ( Integer.parseInt(v.getTag().toString()) ){ case 1: ...
semble nécessaire et peut-être besoin d'autres try-catch manipulation que je ne vois pas comment l'intégrer dans une élégante manière. l'utilisation de setId() comme l'OP proposé semble moins propre, mais beaucoup plus facile en comparaison. toutes les idées sur ce point?(Integer) v.getTag()
.au lieu d'utiliser setTag() la fonction de distinguer facilement.
"Cela n'a pas l'air bon pour moi", pourquoi pas? n'est-ce pas le travail? Vous pouvez également créer une variable membre statique tenir une liste de tous ajouté des boutons, et ensuite chercher les cliqué sur le bouton dans la liste à la place.
Je ne sais pas pourquoi vous voulez créer des boutons N, il ressemble à la valeur de N est supérieur à 10 au moins, si vous n'êtes pas en essayant de leur montrer tout à la fois (je veux dire l'adapter à tous en un seul écran, pas de défilement), vous pourriez essayer de recycler les boutons invisibles tout comme nous le faisons pour l'affichage de la liste à l'aide d'une vue de liste de titulaire. Cela permettrait de réduire votre empreinte mémoire et d'augmenter les performances, et de différencier les boutons de fonction, soit sur le texte que vous mettez sur eux ou une balise ou vous pouvez même organiser une référence pour ceux petit nombre de boutons.
Est préférable de ne pas la gâcher avec de l'ids, setTag et getTag méthodes ont été conçus à cette fin, il est le rapide et propre façon de régler un tas de bouton d'auditeurs sur une mise en page dynamique
Cette réponse peut vous aider à:
https://stackoverflow.com/a/5291891/2804001