如果屏幕旋转,我想保存My对象的列表,所以我按如下方式实现了我的对象:
公共类视频实现Serializable,Parcelable {
private String mTitle;
private String mVideoID;
private String mThumbUrl;
public Video(String title, String id, String thumbUrl) {
this.mTitle = title;
this.mVideoID = id;
this.mThumbUrl = thumbUrl;
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeString(mTitle);
dest.writeString(mVideoID);
dest.writeString(mThumbUrl);
}
public Video(Parcel in) {
// TODO Auto-generated constructor stub
mTitle = in.readString();
mVideoID = in.readString();
mThumbUrl = in.readString();
}
public static final Parcelable.Creator<Video> CREATOR = new Parcelable.Creator<Video>() {
@Override
public Video[] newArray(int size) {
// TODO Auto-generated method stub
return new Video[size];
}
@Override
public Video createFromParcel(Parcel in) {
// TODO Auto-generated method stub
Log.e("CREATOR", in.readString());
return new Video(in);
}
};
}
在MainActivity中,我检索了已保存的对象列表:
if (savedInstanceState != null) {
ArrayList<Video> saved = savedInstanceState.getParcelableArrayList(VIDEO_LIST);
Toast.makeText(this, "Count: " + saved.size(), Toast.LENGTH_SHORT)
.show();
}
- &GT;问题是,旋转屏幕后的对象列表为空:saved.size()= 0 请告诉我为什么?我怎么能解决它。感谢
答案 0 :(得分:0)
这个变量savedInstanceState在onCreate方法里面吗??
对于该变量不同于null,您需要将对象保存在方法onSaveInstanceState(Bundle outState)中,如下所示:
protected void onSaveInstanceState (Bundle outState){
outState.putParcelable(VIDEO_LIST, videoList);
}
更多信息here.
----------- -----------更新
android文档说只有在应用被杀死时才会调用onSaveInstanceState。
在激活某个活动之前调用此方法,以便在此时执行 在未来的某个时候,它可以恢复其状态。
由于您只是在旋转屏幕,因此应用程序不会被杀死,您的活动只会重新创建。 这就是变量为空的原因。