android嵌套对象parceling

时间:2011-07-10 18:04:32

标签: android parcel

我们如何在意图中包裹嵌套对象?
例如 假设有一个对象A,它包含一个字符串变量和另一个对象B.现在B包含对象C. C包含字符串列表。所以我如何在意图中包含对象A.任何对此的帮助都将受到赞赏。
提前感谢。

实施

public static class A 
{
    private B  ObjectB;
}

public static class B 
{
    private String type;
    private List<C> C;
}

public static class C 
{
    private List<D> D;
}

public static class D 
{
    private String id;
    private String name;
    private String address;
    private String email;
}

如何为C类编写parcelable 我正在使用

dest.writeParceable(ObjectC,flag)

阅读:

in.readParcelable(C.getClass().getClassLoader());

但它不起作用

2 个答案:

答案 0 :(得分:1)

你必须为对象B实现parcelable,然后为对象A实现parcelable。我从来没有这样做但是上面应该可以工作。

修改

请参阅下面的代码片段,其中说明了如何为C类实现parcelable。

  1. 首先为D类实现parcelable,如下所示:

    dest.writeString(id); 
    dest.writeString(name);  
    dest.writeString(address);  
    dest.writeString(email);
    
    id = in.readString();  
    name = in.readString();  
    address = in.readString();  
    email = in.readString();  
    
  2. 然后按如下方式为C类实现parcelable:

    dest.writeList(D);
    
    in.readList(D,this.getClass().getClassLoader());
    
  3. 这是未经测试的代码,因为我从未实现嵌套的parceling但值得一试。希望有所帮助。

答案 1 :(得分:0)

我看到这样做的一种方法是使用序列化

例如。

如果您有变量:

Date createdAt;

然后在writeToParcel(Parcel out, int flags)中你可以写:

out.writeSerializable(createdAt); 

要阅读yoy会使用的值:

createdAt = (Date) in.readSerializable();

虽然说Parcelable是专门创建的,因为Java序列化被认为太慢了。因此,虽然这有效,但使用更大的数据并不是一个好主意。