72 votes

Android: Utilisation de findViewById () avec une chaîne / dans une boucle

Je fais une application Android, où il y a une vue composée de centaines de boutons, chacun avec un rappel spécifique. Maintenant, j'aimerais définir ces callbacks en utilisant une boucle, au lieu d'avoir à écrire des centaines de lignes de code (pour chacun des boutons).

Ma question est la suivante: comment utiliser findViewById sans avoir à taper statiquement chaque ID de bouton? Voici ce que j'aimerais faire:

     for(int i=0; i<some_value; i++) {
       for(int j=0; j<some_other_value; j++) {
        String buttonID = "btn" + i + "-" + j;
        buttons[i][j] = ((Button) findViewById(R.id.buttonID));
        buttons[i][j].setOnClickListener(this);
       }
    }
 

Merci d'avance!

127voto

WarrenFaith Points 28137

Vous devriez utiliser getIdentifier()

 for(int i=0; i<some_value; i++) {
   for(int j=0; j<some_other_value; j++) {
    String buttonID = "btn" + i + "-" + j;
    int resID = getResources().getIdentifier(buttonID, "id", "com.sample.project");
    buttons[i][j] = ((Button) findViewById(resID));
    buttons[i][j].setOnClickListener(this);
   }
}
 

6voto

Rick Barkhouse Points 437

Vous pouvez essayer de créer un int [] contenant tous vos identifiants de bouton, puis itérer dessus:

 int[] buttonIDs = new int[] {R.id.button1ID, R.id.button2ID, R.id.button3ID, ... }

for(int i=0; i<buttonIDs.length; i++) {
    Button b = (Button) findViewById(buttonIDs[i]);
    b.setOnClickListener(this);
}
 

3voto

1voto

Ganapathy Points 2888

vous pouvez utiliser la balise si vous souhaitez y accéder.

dans onClick

int i = Integer.parseInt (v.getTag);

Mais vous ne pouvez pas accéder à ce bouton comme cela.

il suffit de créer un bouton par programmation

par Button b = new Button (this);

0voto

Sankar Ganesh Points 6607

créer un bouton personnalisé en code java plutôt en xml comme indiqué ci-dessous

 Button bs_text[]= new Button[some_value];

    for(int z=0;z<some_value;z++)
        {
            try
            {

            bs_text[z]   =  (Button) new Button(this);

            }
            catch(ArrayIndexOutOfBoundsException e)
            {
                Log.d("ArrayIndexOutOfBoundsException",e.toString());
            }
        }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X