1

實例狀態,我有以下型號:保存列表<Object>與Parcelable

GitItem:

public class GitItem implements Serializable, Parcelable { 
     public int id; 
     public String name; 
     public String full_name; 
     public GitOwner owner; 

     public GitItem() { 
     } 

     public GitItem(Parcel in) { 
      id = in.readInt(); 
      name = in.readString(); 
      full_name = in.readString(); 
     } 

     public int describeContents() { 
      return 0; 
     } 

     public void writeToParcel(Parcel out, int flags){ 
      out.writeInt(id); 
      out.writeString(name); 
      out.writeString(full_name); 
     } 

     public static final Parcelable.Creator<GitItem> CREATOR = new Parcelable.Creator<GitItem>(){ 

      @Override 
      public GitItem createFromParcel(Parcel source) { 
       return new GitItem(source); 
      } 

      @Override 
      public GitItem[] newArray(int size) { 
       return new GitItem[size]; 
      } 
     }; 
    } 

和GitOwner:

public class GitOwner implements Serializable, Parcelable { 
    public String avatar_url; 

    public GitOwner(Parcel in) { 
     avatar_url = in.readString(); 
    } 

    public GitOwner() { 
    } 

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

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 

    } 

    public static final Parcelable.Creator<GitOwner> CREATOR = new Parcelable.Creator<GitOwner>(){ 

     @Override 
     public GitOwner createFromParcel(Parcel source) { 
      return new GitOwner(source); 
     } 

     @Override 
     public GitOwner[] newArray(int size) { 
      return new GitOwner[size]; 
     } 
    }; 
} 

,然後在MainActivity。 java我有一個List<GitItem> data;這是綁定到我的RecyclerView

基本上我試圖實現的是當我更改Activity或簡單地旋轉設備時,存儲當前狀態的我的List<GitItem>。不幸的是,即使我實施了Parcelable(正如其他帖子所建議的),我無法存儲實例。

任何有關此事的幫助將不勝感激。

回答

2

您還沒有實現的Parcelable功能完整的身體GitOwnerGitItem類,即writeToParcel

GitOwner

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(avatar_url); 
    // add this line 
} 

和內部GitItem使用writeParcelable編寫和readParcelable以其他方式閱讀GitItem對象時,它將不會被持續和恢復

public GitItem(Parcel in) { 
     id = in.readInt(); 
     name = in.readString(); 
     full_name = in.readString(); 
     owner = in.readParcelable(GitItem.class.getClassLoader()); 
     // Add line to read owner object 
    } 

    public void writeToParcel(Parcel out, int flags){ 
     out.writeInt(id); 
     out.writeString(name); 
     out.writeString(full_name); 
     out.writeParcelable(owner , flags);   
     // Add line to write owner object 
    } 
+1

工程就像一個魅力! –