1

Ich habe die folgenden Modelle:Liste speichern <Object> zum Beispiel Zustand mit Parcel

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

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

und dann in MainActivity. Java Ich habe eine List<GitItem> data;, die an meine RecyclerView gebunden ist.

Grundsätzlich was ich versuche zu erreichen, ist den aktuellen Zustand meiner List<GitItem> zu speichern, wenn ich Activity ändern oder einfach Gerät drehen. Leider konnte ich die Instanz nicht speichern, obwohl ich Parcelable implementiert habe (wie von anderen Posts vorgeschlagen).

Jede Hilfe in dieser Angelegenheit würde sehr geschätzt werden.

Antwort

2

Sie nicht der komplette Körper Parcelable Funktionen writeToParcel

in GitOwner und GitItem Klasse, dh umgesetzt haben

In GitOwner Klasse

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

und innen GitItem Verwendung writeParcelable zu schreiben und readParcelableGitItem Objekt sonst ist es zu lesen wird nicht persistiert und wiederhergestellt

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

funktioniert wie ein Charme! –

Verwandte Themen