数组列表Java中额外的意图

我想通过Intent跳过我的ArrayList 。 但我无法find额外的东西? 任何得到的方法,我得到的错误,如“不适用于string”。

项目详情:

 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; } 

我的课:

 static class ViewHolder { TextView txt_itemName; TextView txt_itemDescription; TextView txt_itemPrice; ImageView itemImage; ArrayList<ItemDetails> item_parent; ArrayList<ItemDetails> item_child; } 

我putExtra:

 intObj.putExtra("exerciselist",obj_itemDetails.getChild()); 

GetChildfunction:

 public ArrayList<ItemDetails> getChild() { return this.item_child; } 

但我无法find我该怎么写来获取arrayList?

 ArrayList<ItemDetails> child1 = getIntent().????????? 

Solutions Collecting From Web of "数组列表Java中额外的意图"

但是我找不到我应该怎么写arrayList

简短的回答:你不能。 你只能传递ArrayList<String>然后检索它

 getIntent().getStringArrayListExtra("key"); 

但是 。 如果你想通过Intent传递自定义对象,你的对象必须实现:

  • Parcelable interfaceSerializable interface

你可以select其中之一。 两者工作相同,但具有不同的实现。

可编程界面:

如果你selectItemDetails接口,你的ItemDetails类必须实现ItemDetails 。 那你可以把它当成

 intent.putParcelableArrayListExtra("key", value); 

并检索它为:

 getIntent().getParcelableArrayListExtra("key"); 

我不会写Parcelable实现,因为它需要更多的代码。 这里是很好的例子 。

可序列化的接口:

如果你selectSerializable接口,我build议你创build一个名为ItemDetailsWrapper的类,它将包装你的ArrayList(s)<ItemDetails>

ItemDetailsWrapper和ItemDetails类都必须实现Serializable接口。 现在你可以像这样通过Intent传递它:

 getIntent().putExtra("key", <serializableClass>); // storing getIntent().getSerializableExtra("key"); // retrieving 

实施示例:

 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 } 

以及如何通过活动:

 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();