Сохранить список<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,

В основном, что я пытаюсь достичь, это сохранить текущее состояние моего List<GitItem> когда я переоденусь Activity или просто поверните устройство. К сожалению, хотя я реализовал Parcelable (как подсказывают другие посты), я не смог сохранить экземпляр.

Любая помощь в этом вопросе будет принята с благодарностью.

1 ответ

Решение

Вы не реализовали полное тело Parcelable функции т.е. writeToParcel в GitOwner а также GitItem учебный класс

В 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
    }
Другие вопросы по тегам