savedInstanceState.getParcelableArrayList()返回空列表

时间:2014-10-28 15:56:26

标签: android android-activity configuration

如果屏幕旋转,我想保存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 请告诉我为什么?我怎么能解决它。感谢

1 个答案:

答案 0 :(得分:0)

这个变量savedInstanceState在onCreate方法里面吗??

对于该变量不同于null,您需要将对象保存在方法onSaveInstanceState(Bundle outState)中,如下所示:

protected void onSaveInstanceState (Bundle outState){
    outState.putParcelable(VIDEO_LIST, videoList);
}

更多信息here.

----------- -----------更新

android文档说只有在应用被杀死时才会调用onSaveInstanceState。

  

在激活某个活动之前调用此方法,以便在此时执行   在未来的某个时候,它可以恢复其状态。

由于您只是在旋转屏幕,因此应用程序不会被杀死,您的活动只会重新创建。 这就是变量为空的原因。