Creación de varios objetos utilizando el bucle for
Lo que quiero es crear vista múltiple en el ejemplo de bucle
for(int i =1; i<5; i++){ GridView view = new Gridview(this); }
Pero crea 5 gridview con el mismo nombre .. así que en futuro no puedo establecer la opción diferente a un gridview específico. ¿Cómo puedo obtener, que gridivew creado en un bucle get view + i name
- Redondeando la mitad con formato decimal en Android
- Programáticamente eliminar SMS no funciona
- Aplicación detenida en Android / SQLITE ERROR /
- Motivo de la llamada a shutdown () en ExecutorService
- Convex Hull en Java Android Opencv 2.3
- Carpeta de activos en Android Studio Unit Test
- Cómo puedo encontrar todas las coincidencias con una expresión regular en android
- Cómo depurar "com.android.okhttp"
- Importar todas las importaciones en eclipse a la vez?
- Reino: se cambió el orden de los registros
- No se puede resolver el destino 'android-21'
- Programar tareas asíncronas múltiples en android
- Conversión entre mensaje y cadena en android?
Utilizar una lista
List<GridView> views = new ArrayList<GridView>(); for(int i = 1; i < 5; i++) { views.add(new GridView(this)); }
A continuación, puede obtener sus puntos de vista con
views.get(i);
Además, en su ejemplo, cuando se termina un paso del bucle for
, la referencia a ese objeto se pierde, ya que el ámbito en el que fueron creados queda. Sin referencia a los objetos, el recolector de basura entra y libera esa memoria, borrando los objetos.
Por lo tanto, no podrá acceder ni siquiera al último objeto creado. Si modifica el código de este modo, al final de este código sólo tendrá el último objeto instanciado:
GridView view; for(int i =1; i<5; i++){ view = new Gridview(this); }
Ahora el objeto existe en el ámbito al que se encuentra al final del fragmento de código. Pero sólo existe un objeto.
Por lo tanto, la solución es almacenar los objetos en alguna estructura adicional: una matriz si sabe exactamente cuántos objetos desea, o alguna estructura de colección asignada dinámicamente. Y usted tiene ejemplos de ambos en las otras respuestas.
Añadido : Lo que realmente estás pidiendo (para construir dinámicamente el nombre de referencia del objeto) se llama metaprogramación. No sé si es posible en Java, pero aquí hay un ejemplo de esto hecho en PHP:
class Object { function hello(){ echo "Hello \n"; } } for($i =1; $i<5; $i++){ $name = "view".$i; $$name = new Object(); } $view1->hello(); $view2->hello(); $view4->hello();
Aquí está el código runnable: http://codepad.org/bFqJggG0
Utilice una List
de GridViews
.
List<GridView> grids = new ArrayList<GridView>(); for(int i =1; i<5; i++){ grids.add(new Gridview(this)); }
Creo que este código creará 5 GridViews, 4 de los cuales estarán inmediatamente disponibles para Garbage Collection ya que su código ya no tiene una referencia a ellos.
Si usted los crea en un bucle, entonces pienso que estaría mirando para almacenarlos en una estructura de datos tal como una lista o un mapa y entonces tener acceso a ellos vía un índice o una llave.
Creo que puedes hacer algo como esto:
for(int i =1; i<5; i++){ GridView view = new Gridview(this); view.setId(i); }
y luego, puede diferenciar entre todas las vistas
GridView[] view=new GridView[5]; for(int i=1;i<5;i++){ view[i]=new GridView(this);}
Ahora creo que puede establecer las opciones especificadas.
- Cómo deshabilitar las notificaciones push?
- android sqlite excepción: java.lang.IllegalArgumentException: columna '_id' no existe