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:
- El botón recortado no recibe la entrada táctil
- ¿Hay un tamaño de botón estándar?
- El botón de imagen de 9 parches de Android no está escalado según lo previsto
- Botones que faltan en AlertDialog | Android 7.0 (Nexus 5x)
- Botón onClick y ListView onItemClick
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!
- Botones de diseño de material de Android - Pre lollipop
- ¿Cómo desactivar el botón si EditText está vacío?
- Ayuda de Android con cambiar el tipo de fuente del botón, ¿cómo?
- ¿Puedes usar el mismo OnClickListener para diferentes botones?
- Cómo deshabilitar el botón tan pronto como se hace clic
- Cambia dinámicamente el ancho de un botón en Android
- Cómo puedo agregar el botón en MapView android
- ¿Pasar un argumento al llamar a setOnClickListener?
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.
- Cómo configurar un efecto ripple en textview o imageview en Android?
- Compruebe si el dispositivo está enchufado