savedInstanceState.getParcelableArrayList()返回空列表 [英] savedInstanceState.getParcelableArrayList() return empty list

查看:803
本文介绍了savedInstanceState.getParcelableArrayList()返回空列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果屏幕旋转时,我要救我的对象列表,让我实现了我的目标如下:

If screen is rotated, I want to save list of My objects, so I implemented my Object as following:

公共类视频实现Serializable,Parcelable {

public class Video implements 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,取出了我救对象列表:

And in the MainActivity, i retrieved saved list of objects:

  if (savedInstanceState != null) {
        ArrayList<Video> saved = savedInstanceState.getParcelableArrayList(VIDEO_LIST);

        Toast.makeText(this, "Count: " + saved.size(), Toast.LENGTH_SHORT)
                .show();
    }

- >问题是,旋转物体的画面列表之后是​​空的:saved.size()= 0 请告诉我为什么?我如何解决它。谢谢

--> The problem is, After rotating screen list of objects is empty: saved.size() = 0 Please tell me why? I how can i resolve it. Thanks

推荐答案

这个变量savedInstanceState里面onCreate方法正确?

this variable savedInstanceState is inside onCreate method right??

该变量大于零的不同,你需要保存对象的方法的onSaveInstanceState(包outState)里面,像这样的:

for that variable be different than null, you need to save the object inside the method onSaveInstanceState (Bundle outState), like this:

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

更多信息<一个href="http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle)"相对=nofollow>这里

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

-----------Update-----------

Android的文件说的onSaveInstanceState是,当应用程序被杀害只调用。

the android document say that onSaveInstanceState is only called when the app is killed.

此方法称为活动可能被杀死之前,这样,当它   回来一段时间以后就可以恢复自己的状态。

This method is called before an activity may be killed so that when it comes back some time in the future it can restore its state.

由于您只旋转屏幕,应用程序是不是杀了,你的活动仅重新。 这就是为什么该变量为空。

Since you are only rotating the screen, the app is not killed, your activity is only recreate. That is why the variable is null.

这篇关于savedInstanceState.getParcelableArrayList()返回空列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆