保存onSaveInstanceState中的对象列表

VLe*_*ovs 3 android

我想RecyclerView在屏幕旋转后不重新加载.我发现,我需要存储/恢复ListAdapter.不是吗?

但是有问题:

Found java.util.List<Department> requried java.util.ArrayList<?extends android.os.Parcelable>
Run Code Online (Sandbox Code Playgroud)

当我尝试将列表放入包中时:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putParcelableArrayList("key", mAdapter.getList());
}
Run Code Online (Sandbox Code Playgroud)

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

但是我ParcelableDepartment模型类中实现了:

@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);
    }
}
Run Code Online (Sandbox Code Playgroud)

怎么了 ?

dan*_*ata 10

ArrayList是一个子类List,从... List转向ArrayList...糟糕的想法...它会产生问题,特别是对于可分配的东西.

因此,快速解决方案是:

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