Android 保存列表<;对象>;使用Parcelable实例状态
我有以下型号: GitItem:Android 保存列表<;对象>;使用Parcelable实例状态,android,arraylist,android-recyclerview,android-savedstate,Android,Arraylist,Android Recyclerview,Android Savedstate,我有以下型号: GitItem: public class GitItem implements Serializable, Parcelable { public int id; public String name; public String full_name; public GitOwner owner; public GitItem() { } public G
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];
}
};
}
公共类GitItem实现可序列化、可打包{
公共int id;
公共字符串名称;
公共字符串全名;
公共土地所有者;
公共项目(){
}
公共物品(包裹内){
id=in.readInt();
name=in.readString();
full_name=in.readString();
}
公共int描述内容(){
返回0;
}
公共无效写入包(包出,内部标志){
out.writeInt(id);
out.writeString(名称);
out.writeString(全名);
}
public static final Parcelable.Creator=新建Parcelable.Creator(){
@凌驾
公共GitItem createFromParcel(地块源){
返回新项目(来源);
}
@凌驾
公共GitItem[]新数组(整数大小){
返回新项目[大小];
}
};
}
和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];
}
};
}
公共类GitOwner实现可序列化、可打包{
公共字符串头像url;
公共土地所有者(地块所在地){
avatar_url=in.readString();
}
公共所有者(){
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
}
public static final Parcelable.Creator=新建Parcelable.Creator(){
@凌驾
公共GitOwner createFromParcel(地块源){
返回新的GitOwner(源);
}
@凌驾
公共GitOwner[]新数组(整数大小){
返回新的GitOwner[大小];
}
};
}
然后在MainActivity.java中,我有一个列表数据代码>它绑定到myRecyclerView
基本上,我试图实现的是,当我更改活动
或简单地旋转设备时,存储我的列表的当前状态。不幸的是,即使我已经实现了Parcelable
(正如其他帖子所建议的那样),我也无法存储该实例
在此问题上的任何帮助都将不胜感激。您尚未在GitOwner
和GitItem
类中实现完整的Parcelable
功能,即writeToParcel
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(avatar_url);
// add this line
}
在GitOwner
类中
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(avatar_url);
// add this line
}
在GitItem
中,用于写入和读取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
}