2016-09-15 50 views
0

在我的Android應用Parcelable對象的列表,我想用IntentSingleGroup列表傳遞到另一個Activity每個SingleGroup對象包含的SingleImage名單,這裏有類SingleImageSingleGroupAndroid的使用意圖發送包含另一個Parcelable對象的列表

public class SingleImage implements Parcelable{ 

public String name; 
public int drawableId; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public int getDrawableId() { 
    return drawableId; 
} 

public void setDrawableId(int drawableId) { 
    this.drawableId = drawableId; 
} 

public SingleImage(String name, int drawableId) 
{ 
    this.name = name; 
    this.drawableId = drawableId; 
} 

public static final Parcelable.Creator<SingleImage> CREATOR 
     = new Parcelable.Creator<SingleImage>() 
{ 
    public SingleImage createFromParcel(Parcel in) 
    { 
     return new SingleImage(in); 
    } 

    public SingleImage[] newArray(int size) 
    { 
     return new SingleImage[size]; 
    } 
}; 

private SingleImage(Parcel in) 
{ 
    name = in.readString(); 
    drawableId = in.readInt(); 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(name); 
    dest.writeInt(drawableId); 
} 
} 

這裏是SingleGroup類:

public class SingleGroup implements Parcelable{ 
private static final String TAG = "SINGLEGROUP"; 
private ArrayList<SingleImage> images = new ArrayList<SingleImage>(0); 
private String myTitle; 
private String groupDesc; 

public SingleGroup(String mTitle, String desc, ArrayList<SingleImage> imagesList) { 
    this.myTitle = mTitle; 
    this.groupDesc = desc; 
    this.images = imagesList; 
} 

public String getGroupDesc() { 
    return groupDesc; 
} 

public String getMyTitle() { 
    return myTitle; 
} 

public void setMyTitle(String myTitle) { 
    this.myTitle = myTitle; 
} 

public ArrayList<SingleImage> getImages() { 
    return images; 
} 

public void setImages(ArrayList<SingleImage> images) { 
    this.images = images; 
} 

public static final Parcelable.Creator<SingleGroup> CREATOR 
     = new Parcelable.Creator<SingleGroup>() 
{ 
    public SingleGroup createFromParcel(Parcel in) 
    { 
     return new SingleGroup(in); 
    } 

    public SingleGroup[] newArray(int size) 
    { 
     return new SingleGroup[size]; 
    } 
}; 

private SingleGroup(Parcel in) 
{ 
    myTitle = in.readString(); 
    groupDesc = in.readString(); 

    //problem maybe here 
    in.readTypedList(images,SingleImage.CREATOR); 
} 
@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(myTitle); 
    dest.writeString(groupDesc); 

    //problem maybe here 
    dest.writeTypedList(images); 
} 

@Override 
public String toString() { 
    String result = "myTitle "+myTitle+" desc "+ groupDesc + " imagesize "+images.size(); 
    return result; 
} 
} 

它可以調用通過當確定通過Intent, 而當我打電話給通ArrayLlist<SingleGroup>通過Intent我得到錯誤:

Parcel [email protected]: Unmarshalling unknown type code 3211379 at offset 224

任何想法?在此先感謝

----------------更新----------------
我已將in.readTypedList(images, null);更改爲in.readTypedList(images, SingleImage.CREATOR);但它還是行不通。相同的反編組錯誤

----------------解決問題--------------
感謝凱塔。真正的問題實際上並沒有在我的代碼中列出。當我傳遞可以分類的對象時,我還應該包含一些我錯過的其他屬性。
強烈推薦AS插件Android Parcelable code generator

回答

2

您必須通過SingleImage.CREATOR到方法readTypedList而不是 「空」 值

private SingleGroup(Parcel in) 
{ 
    myTitle = in.readString(); 
    groupDesc = in.readString(); 

    //problem maybe here 
    in.readTypedList(images, SingleImage.CREATOR); 
} 
+0

謝謝,但我想在此之前,同樣的錯誤 –

+0

你可以用插件[安卓Parcelable代碼生成器(HTTPS嘗試://plugins.jetbrains .com/plugin/7332),然後使用插件爲您的parcelable對象生成parcelable代碼 –

+0

感謝Keita,問題解決了。 –

0

試試這一個。這就是我總是這樣做,它的工作:

private SingleGroup(Parcel in) 
{ 
    myTitle = in.readString(); 
    groupDesc = in.readString(); 

    //problem maybe here 
    in.createTypedArrayList(SingleImage.CREATOR); 
} 
+0

謝謝,但無法正常工作 –

相關問題