使用 Parcelable 将 List<Object> 保存到实例状态
Save List<Object> to instance state with 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];
}
};
}
和 Git 所有者:
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
.
基本上我想要实现的是在我更改 Activity
或简单地旋转设备时存储我的 List<GitItem>
的当前状态。不幸的是,即使我已经实现了 Parcelable
(如其他帖子所建议的),我仍无法存储实例。
如有任何帮助,我们将不胜感激。
您尚未实现 Parcelable
函数的完整主体,即 GitOwner
和 GitItem
class
中的 writeToParcel
在GitOwner
class
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(avatar_url);
// add this line
}
并在GitItem
内部使用writeParcelable
to write and 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
}
我有以下型号:
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];
}
};
}
和 Git 所有者:
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
.
基本上我想要实现的是在我更改 Activity
或简单地旋转设备时存储我的 List<GitItem>
的当前状态。不幸的是,即使我已经实现了 Parcelable
(如其他帖子所建议的),我仍无法存储实例。
如有任何帮助,我们将不胜感激。
您尚未实现 Parcelable
函数的完整主体,即 GitOwner
和 GitItem
class
writeToParcel
在GitOwner
class
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(avatar_url);
// add this line
}
并在GitItem
内部使用writeParcelable
to write and 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
}