PDA

Ver la Versión Completa : [ SOLUCIONADO ] Cambiar background a la vez


Guixe94
21/11/14, 00:12:24
Hola,

Tengo una actividad con 30 botones, y tengo una variable llamada "Nivel", todos los botones tienen un background gris, pero quiero que por ejemplo si la variable nivel es igual a 23 pues que todos los botones asta el 23 se cambie el background a verde.

Los botones tienen las id's: bt1, bt2, etc. (de momento).

Se puede hacer pues con if, else if, else if, etc. pero claro es muchisimo codigo y seguramente minimo añadire asta 100 botones. Por eso queria saber si alguien podria decirme alguna forma con un bucle o algo?

yo he pensando por ejemplo con un bucle "for", que me cree la variable por ejemplo "i" y cada vez que i<nivel me aumente en 1 esta variable y pues asi me vaya cambiando todos los background, el problema es que dentro del bucle no se como hacer para que me coja el digito numerico de "i" y le añada bt delante por ejemplo para poder poner bt1.setBackgr.. es posible eso? o no se puede?


Gracias chic@s como siempre.

kriogeN
21/11/14, 00:23:53
Puedes obtener el id de una View así:

int botonID = getResources().getIdentifier("boton", "id", getPackageName());

Para luego obtener el botón así:

findViewById(botonID);

Es decir, que podrías hacer esto:

for (int i=1;i<=ultimoNivel;i++) {
int botonID = getResources().getIdentifier("bt"+i, "id", getPackageName());
......
}

Guixe94
21/11/14, 00:27:11
Puedes obtener el id de una View así:

int botonID = getResources().getIdentifier("boton", "id", getPackageName());

Para luego obtener el botón así:

findViewById(botonID);

Es decir, que podrías hacer esto:

for (int i=1;i<=ultimoNivel;i++) {
int botonID = getResources().getIdentifier("bt"+i, "id", getPackageName());
......
}
Muchas gracias!
Y entonces para cambiar el background? Por que claro no puedo poner botonID.setBackgr... ya que es un int..

kriogeN
21/11/14, 00:31:56
Te lo he dicho, una vez que tienes el botonID haces:

((Button)findViewById(botonID)).setBack....

Guixe94
21/11/14, 00:33:03
Te lo he dicho, una vez que tienes el botonID haces:

((Button)findViewById(botonID)).setBack....


Es verdad, lo siento.

Muchas gracias por todo!

Algún día tengo que invitarte a algo..!

Guixe94
21/11/14, 00:55:10
Te lo he dicho, una vez que tienes el botonID haces:

((Button)findViewById(botonID)).setBack....

Tengo un problema, mi codigo actual es este:

for ( int xd=1; xd<Integer.parseInt(MyActivity.Nivel); xd++ ) {

int botonID = getResources().getIdentifier("bt"+xd, "id", getPackageName());
TVNiveles.setText(Integer.toString(xd));

(findViewById(botonID)).setBackgroundDrawable(getR esources().getDrawable(R.drawable.btpista));


}

Pero tal i como esta en el setBackground me da null pointer, pero el TVNiveles si que me pone el texto correctamente por el nivel.
Tambien si cambio esta frase y la pongo asi:

int botonID = getResources().getIdentifier("bt"+1, "id", getPackageName());

Me funciona lo que claro solo me cambia el background del numero 1. Que falla? llevo un rato dandole vueltas pero no lo veo.

Gracias

EDITO: Ya esta solucionado, al parecer tenia la id del boton 13 mal escrita y por eso cuando llegaba a este me saltaba el null pointer, saludos.