2014-10-28 6 views
1

Если экран поворачивается, я хочу, чтобы сохранить список моих объектов, поэтому я реализовал свой объект следующим образом:savedInstanceState.getParcelableArrayList() возвращают пустой список

общественного класса Video реализует 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(); 
    } 

-> Проблема в том, что после поворота экрана список объектов пуст: saved.size() = 0 Скажите, пожалуйста, почему? Я как могу это решить. Спасибо

ответ

0

эта переменная savedInstanceState находится внутри onCreate метод права ??

для этой переменной будет отличаться от нулевой, вам нужно сохранить объект внутри метода onSaveInstanceState (Bundle outState), как это:

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

подробнее here.

------ ----- Обновить -----------

Файл android сообщает, что onSaveInstanceState вызывается только тогда, когда приложение убито.

Этот метод вызывается до того, как действие может быть убито, так что, когда он возвращается в будущем, он может восстановить свое состояние.

Поскольку вы только вращаете экран, приложение не убивается, ваша деятельность воссоздается. Вот почему переменная имеет значение null.

+0

Да, я сохранил состояние в onSaveInstanceState, но я использовал: outState.putParcelableArrayList (VIDEO_LIST, mVideos); – Binngokute

+0

Посмотрите на обновление моего ответа. – FelipeJM

+0

Проблема даже сохраняетсяInstanceState NOT NULL, но savedInstanceState.getParcelableArrayList (VIDEO_LIST) возвращает пустой список – Binngokute