【问题标题】:Save List<Object> to instance state with Parcelable使用 Parcelable 将 List<Object> 保存到实例状态
【发布时间】:2017-06-04 11:28:35
【问题描述】:

我有以下型号:

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&lt;GitItem&gt; data; 绑定到我的RecyclerView

基本上我想要实现的是在我更改Activity 或简单地旋转设备时存储我的List&lt;GitItem&gt; 的当前状态。不幸的是,即使我实现了Parcelable(如其他帖子所建议的那样),我也无法存储实例。

我们将非常感谢您对此事的任何帮助。

【问题讨论】:

    标签: android arraylist android-recyclerview android-savedstate


    【解决方案1】:

    您还没有实现Parcelable 函数的完整主体,即writeToParcelGitOwnerGitItem 类中

    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
        }
    

    【讨论】:

      猜你喜欢
      • 2010-09-14
      • 2013-04-15
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      相关资源
      最近更新 更多