Android: Usar findViewById () con una cadena / en un bucle

Estoy haciendo una aplicación de Android, donde hay una vista compuesta de cientos de botones, cada uno con una devolución de llamada específica. Ahora, me gustaría establecer estas devoluciones de llamada utilizando un bucle, en lugar de tener que escribir cientos de líneas de código (para cada uno de los botones).

Mi pregunta es: ¿Cómo puedo utilizar findViewById sin tener que escribir de forma estática cada ID de botón? Esto es lo que me gustaría hacer:

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); } } 

¡Gracias por adelantado!

    6 Solutions collect form web for “Android: Usar findViewById () con una cadena / en un bucle”

    Usted debe usar 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", getPackageName()); buttons[i][j] = ((Button) findViewById(resID)); buttons[i][j].setOnClickListener(this); } } 

    Puede intentar hacer un int [] que contenga todos sus identificadores de botón y luego iterar sobre eso:

     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); } 

    Echa un vistazo a estas respuestas:

    • Android y obtener una vista con id cast como una cadena
    • Array de ImageButtons, asignar R.view.id desde una variable

    Puede utilizar etiqueta si desea acceder.

    En onClick

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

    Pero no puedes acceder a ese botón como este.

    Simplemente cree el botón programáticamente

    Por Button b=new Button(this);

    Crear el botón personalizado en el código java más bien en Xml como se muestra a continuación

     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()); } } 

    Si su vista de nivel superior sólo tiene las vistas de los botones como niños, podría hacerlo

     for (int i = 0 ; i < yourView.getChildCount(); i++) { Button b = (Button) yourView.getChildAt(i); b.setOnClickListener(xxxx); } 

    Si hay más vistas presentes que usted necesita comprobar si el seleccionado es uno de sus botones.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.