首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在onSaveInstanceState中保存对象列表

在onSaveInstanceState中保存对象列表
EN

Stack Overflow用户
提问于 2016-06-22 19:24:03
回答 2查看 9.8K关注 0票数 6

我不想在屏幕旋转后重新加载RecyclerView。我发现我需要从Adapter存储/恢复List。不是吗?

但是有一个问题:

代码语言:javascript
代码运行次数:0
运行
复制
Found java.util.List<Department> requried java.util.ArrayList<?extends android.os.Parcelable>

当我尝试将list放入包中时:

代码语言:javascript
代码运行次数:0
运行
复制
@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putParcelableArrayList("key", mAdapter.getList());
}

mAdapter.getList()从RecyclerView的适配器返回List<Department>

但我在Department模型类中实现了Parcelable

代码语言:javascript
代码运行次数:0
运行
复制
@Parcel
public class Department implements UrlInterface,Parcelable {

    @SerializedName("department_id")
    @Expose
    String departmentId;
    @SerializedName("short_name")
    @Expose
    String shortName;
    @Expose
    String url;
    @Expose
    HashMap<Integer, Category> categories;

    public Department() {}

    protected Department(android.os.Parcel in) {
        departmentId = in.readString();
        shortName = in.readString();
        url = in.readString();
    }

    public static final Creator<Department> CREATOR = new Creator<Department>() {
        @Override
        public Department createFromParcel(android.os.Parcel in) {
            return new Department(in);
        }

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

    public String getDepartmentId() { return departmentId; }

    public void setDepartmentId(String departmentId) { this.departmentId = departmentId; }

    public String getShortName() { return shortName; }

    public void setShortName(String shortName) { this.shortName = shortName; }

    @Override
    public String getUrl() { return url; }

    @Override
    public String getFullName() { return shortName; }

    public void setUrl(String url) { this.url = url; }

    public HashMap<Integer, Category> getCategories() { return categories; }

    @Override
    public String toString() { return shortName; }

    @Override
    public String getImageUrl() { return null; }

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

    @Override
    public void writeToParcel(android.os.Parcel dest, int flags) {
        dest.writeString(departmentId);
        dest.writeString(shortName);
        dest.writeString(url);
    }
}

出什么问题了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-22 19:28:48

ArrayListList的一个子类,从ListArrayList....bad idea...and的转换会产生问题,特别是对于可包裹的东西。

所以快速的解决方案是这样做:

outState.putParcelableArrayList("key", new ArrayList<Department>(mAdapter.getList()));

票数 13
EN

Stack Overflow用户

发布于 2020-05-16 08:33:43

上面的解决方案对我不起作用,继续抛出错误。下面的解决方案,由Android Studio提供的hind为我所用-

代码语言:javascript
代码运行次数:0
运行
复制
outState.putParcelableArrayList("message_list", (ArrayList<? extends Parcelable>) messageList);

以防其他人也在这个帖子上寻找类似的解决方案!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37966608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档