PDA

Ver la Versión Completa : ¿Se puede crear layouts aleatorios?


aquiles777
12/10/15, 20:09:25
Hola buenas mi pregunta es si se pueden crear ventanas aleatorias que al pulsar un boton te lleve al layout 2 o al 5 o al 10 y si pudieras decirme el codigo os lo agradeceria mucho gracias.

kriogeN
12/10/15, 20:38:06
Por partes, en primer lugar necesitas obtener el ID de un layout a partir de su nombre en una cadena de texto, es decir, si normalmente para establecer un Layout haces esto:

setContentView(R.layout.nombre);

Necesitarías hacer esto:

int layout = getResources().getIdentifier("nombre", "layout", getPackageName());
setContentView(layout);

Ahora, para abrir un layout al azar, vamos a ir a lo fácil y suponer que se llaman: layout1, layout2, layout3 ,hasta por ejemplo layout10. Necesitas obtener un número al azar entre 1 y 10, así:

Random random = new Random();
int r = random .nextInt(10) + 1;

Y concatenar el número al nombre:

String nombre = "layout"+r;

Todo junto:

Random random = new Random();
int r = random .nextInt(10) + 1;
String nombre = "layout"+r;
int layout = getResources().getIdentifier(nombre, "layout", getPackageName());
setContentView(layout);

aquiles777
12/10/15, 21:08:29
veras me queda asi pero al iniciar la aplicacion al pulsar el boton se me cierra y se sale de la aplicacion


http://s15.postimg.org/t0atuqfdj/foton.jpg (http://postimg.org/image/t0atuqfdj/)

kriogeN
12/10/15, 21:56:27
Creo que el fallo es más que obvio,

Lo que yo te he puesto es un ejemplo que funciona en el caso de que los layout se llamen "layout1", "layout2" etc, en tu caso se llaman "ventana_2", "ventana_3", etc. Así que el String nombre debes adaptarlo a:

String nombre = "ventana_"+r;

Además, el random.nextInt(x) va desde 0 hasta x-1. Así que como en tu caso empiezas por ventana_2 y vas hasta ventana_10 debería ser algo así:

int r = random .nextInt(9) + 2;

O añadir un ventana_1 y dejar la línea como estaba, es decir,

int r = random .nextInt(10) + 1;

EDIT: Estoy viendo bastantes más fallos, como por ejemplo el lugar donde has puesto el código y que tengas 1 clase por cada Layout, esa no es la idea para lo que quieres, y si esa es la idea entonces lo he entendido mal y lo que quieres es lanzar una nueva Activity basada en su nombre. Para poder realizar eso es bastante más complejo, porque hay que usar reflexión.

aquiles777
12/10/15, 22:23:29
perdoname por mi torpeza pero sigue pasandome lo mismo te pongo unas fotos por si ay algo mas

http://s8.postimg.org/49my59341/11111111.jpg (http://postimg.org/image/49my59341/)

http://s2.postimg.org/ncg9bksyd/2222222.jpg (http://postimg.org/image/ncg9bksyd/)

http://s30.postimg.org/y4onk300d/33333333.jpg (http://postimg.org/image/y4onk300d/)