【问题标题】:Array List Intent extra in Java [closed]Java中额外的数组列表意图[关闭]
【发布时间】:2013-03-31 15:29:26
【问题描述】:

我正在尝试跳过我的 ArrayListIntent。但是我找不到要写的额外内容?任何获取方法我都会收到诸如“不适用于字符串”之类的错误。

物品详情:

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

GetChild 函数:

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

但是我找不到我应该如何写来获取arrayList?

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

【问题讨论】:

    标签: java android android-intent


    【解决方案1】:

    但我找不到我应该如何写来获取数组列表

    简短的回答:你不能。你只能传递ArrayList&lt;String&gt; 然后用

    getIntent().getStringArrayListExtra("key");
    


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

    您可以选择其中之一。两者的工作方式相同,但实现方式不同。

    Parcelable 接口:

    如果你选择 Parcelable 接口,你的ItemDetails 类必须实现 Parcelable。然后你可以把它写成

    intent.putParcelableArrayListExtra("key", value);
    

    并将其检索为:

    getIntent().getParcelableArrayListExtra("key");
    

    我不会为您编写 Parcelable 实现,因为它需要更多代码。这里是nice example

    可序列化接口:

    如果你选择 Serializable 接口,我建议你创建一个名为 ItemDetailsWrapper 的类来包装你的ArrayList(s)&lt;ItemDetails&gt;

    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
    }
    

    以及如何通过Activity:

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

    【讨论】:

    • 很好的答案!这个例子很到位!
    • @Jlange 谢谢你的朋友。
    • 完美放置&获取数组列表!!!
    • 在选择 Parcelable 或 Serializable 时请记住,Serializable 比 Parcelable 慢
    • 完美解释:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2014-02-23
    • 2022-08-19
    相关资源
    最近更新 更多