Array List Intent extra en Java
Estoy tratando de omitir mi ArrayList
través de Intent
. Pero no puedo encontrar lo que escribir en extra? Cualquier método get me estoy recibiendo errores como "no es aplicable para cadena".
Detalles del artículo:
- Prueba de una biblioteca de Android con Robolectric
- ¿Cómo crear una copia del mismo objeto con referencia diferente?
- "No se pudo encontrar la clase 'android.support.v4.app.FragmentActivity'" Error
- Imagen de carga perezosa con barra de progreso hacer corrupción de la imagen cuando la imagen mostrada
- Java Singleton + clase interna mal entendida
public class ItemDetails { public String getName() { return name; } public void setName(String name) { this.name = name; } public String getItemDescription() { return itemDescription; } public void setItemDescription(String itemDescription) { this.itemDescription = itemDescription; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public int getImageNumber() { return imageNumber; } public void setImageNumber(int imageNumber) { this.imageNumber = imageNumber; } public int getVideoNumber() { return videoNumber; } public void setVideoNumber(int videoNumber) { this.videoNumber = videoNumber; } public void setChild(ArrayList<ItemDetails> item_child) { this.item_child = item_child; } public ArrayList<ItemDetails> getChild() { return this.item_child; } public void setParent(ArrayList<ItemDetails> item_parent) { this.item_parent = item_parent; } public ArrayList<ItemDetails> getParent() { return this.item_parent; } private String name ; private String itemDescription; private String price; private int imageNumber; private int videoNumber; private ArrayList<ItemDetails> item_child; private ArrayList<ItemDetails> item_parent; }
Mi clase:
static class ViewHolder { TextView txt_itemName; TextView txt_itemDescription; TextView txt_itemPrice; ImageView itemImage; ArrayList<ItemDetails> item_parent; ArrayList<ItemDetails> item_child; }
Mi putExtra:
intObj.putExtra("exerciselist",obj_itemDetails.getChild());
Función GetChild:
public ArrayList<ItemDetails> getChild() { return this.item_child; }
Pero no puedo encontrar cómo se supone que escribir para obtener arrayList?
ArrayList<ItemDetails> child1 = getIntent().?????????
- Mostrar una notificación sólo en el dispositivo portátil
- ¿Cómo encontrar la raíz de fugas de memoria?
- FragmentPagerAdapter muestra todo el contenido del fragmento en la primera página
- DataOutputSteam me está lanzando una 'java.io.IOException: inesperado final de la secuencia'?
- Efecto en GC de la utilización de variables locales frente a campos
- Procesamiento de energía - dispositivos móviles vs Desktop - 100x diferencia?
- Cómo implementar pestañas ahora que TabActivity está obsoleto
- ¿Las clases Java de ByteBuffer / IntBuffer / ShortBuffer son rápidas?
Pero no puedo encontrar cómo se supone que ı se supone que escribir para obtener arrayList
Respuesta corta: no se puede. Sólo puede pasar ArrayList<String>
y, a continuación, recuperarlo con
getIntent().getStringArrayListExtra("key");
Pero . Si desea pasar objetos personalizados a través de Intent que sus objetos tienen que implementar:
-
Parcelable interface
oSerializable interface
Usted puede elegir uno de ellos. Ambos funcionan igual pero tienen implementaciones diferentes.
Interfaz parcelable:
Si elige Interfaz parcelable, su clase ItemDetails
tiene que implementar Parcelable. Entonces usted puede ponerlo como
intent.putParcelableArrayListExtra("key", value);
Y recuperarlo como:
getIntent().getParcelableArrayListExtra("key");
No voy a escribir la implementación Parcelable porque requiere un poco más de código. Aquí está un buen ejemplo .
Interfaz serializable:
Si elige Serializable interfaz le sugiero que cree una clase llamada por ejemplo ItemDetailsWrapper que envolverá su ArrayList(s)<ItemDetails>
Ambos, es decir, ItemDetailsWrapper y ItemDetails clase tienen que implementar interfaz Serializable. Ahora usted es capaz de pasar a través de Intent como este:
getIntent().putExtra("key", <serializableClass>); // storing getIntent().getSerializableExtra("key"); // retrieving
Ejemplo de implementación:
public class ItemDetailsWrapper implements Serializable { private static final long serialVersionUID = 1L; private ArrayList<ItemDetails> itemDetails; public ItemDetailsWrapper(ArrayList<ItemDetails> items) { this.itemDetails = items; } public ArrayList<ItemDetails> getItemDetails() { return itemDetails; } } public class ItemDetails implements Serializable { private static final long serialVersionUID = 1L; // getters, setters and properties }
Y cómo pasar por Actividades:
ItemDetailsWrapper wrapper = new ItemDetailsWrapper(list); Intent i = new Intent(<context>, <targetActivity>); i.putExtra("obj", wrapper); // i.putExtra("obj", new ItemDetailsWrapper(list)); // retrieving ItemDetailsWrapper wrap = (ItemDetailsWrapper) getIntent().getSerializableExtra("obj"); ArrayList<ItemDetails> list = wrap.getItemDetails();