Est-il possible d'écrire une boucle for pour assigner des écouteurs à plusieurs boutons avec la même fonction que celle utilisée pour les finales? [android]


Answers

Changez simplement votre code comme ça:

//for loop to assign same functionality to buttons in pickPlayers array
for(int i = 0; i<pickPlayers.length; i++){
        final int index = i;
        b = (Button) findViewById(pickPlayers[i]);
        b.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent getContactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
                startActivityForResult(getContactIntent, index);
            }
        });
    };

Cela devrait faire le travail. Bonne chance!

Question

J'écris une application Android et j'ai 8 boutons sur une vue qui ont tous la même fonction, donc je voulais attribuer la même fonctionnalité à chaque bouton en utilisant une boucle for plutôt que d'écrire 8 morceaux de code séparé. Cependant, un problème survient lorsque je veux utiliser le compteur de la boucle for dans la fonction onClick pour aider à déclencher une intention, voici le code:

//array of button ids
public int [] pickPlayers = { R.id.pick_player_1a, R.id.pick_player_2a, R.id.pick_player_3a, R.id.pick_player_4a, R.id.pick_player_1b, R.id.pick_player_2b, R.id.pick_player_3b, R.id.pick_player_4b};

//button to be used in for loop
public Button b;

//for loop to assign same functionality to buttons in pickPlayers array
for(int i = 0; i<pickPlayers.length; i++){
        b = (Button) findViewById(pickPlayers[i]);
        b.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent getContactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
                startActivityForResult(getContactIntent, i);
            }
        });
    };

J'espère que tout a du sens, merci à tous ceux qui peuvent aider. :)

EDIT: C'est l'erreur que je reçois: Impossible de se référer à une variable non-finale i dans une classe interne définie dans une méthode différente

La boucle for est dans ma méthode oncreate les variables et les boutons sont à l'extérieur