У меня есть пользовательский ArrayList из MovieItems, который я хочу сохранить и восстановить на экране. Я проверил этот пост - How to save custom ArrayList on Android screen rotate? - и реализовал и адаптировал некоторые из кодов, но сохранение и восстановление, похоже, не работают для меня.Сохранение/восстановление пользовательского ArrayList на экране Android?
1) Сохранение ArrayList:
public List<MovieItem> mItems = new ArrayList<>();
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putParcelableArrayList(MOVIE_KEY, (ArrayList<? extends Parcelable>) mItems);
super.onSaveInstanceState(outState);
}
2) Восстановление в ArrayList:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null)
{
mItems = savedInstanceState.getParcelableArrayList(MOVIE_KEY);
}
setRetainInstance(true);
......
}
3) Создание класса MovieItem Parcelable:
public class MovieItem implements Parcelable{
private static final long serialVersionUID = 1L;
private String mCaption;
private String mId;
private String mUrl;
private String plot;
private Double rating;
private String release_date;
private boolean favourite;
public MovieItem() {
}
protected MovieItem(Parcel in) {
mCaption = in.readString();
mId = in.readString();
mUrl = in.readString();
plot = in.readString();
release_date = in.readString();
favourite = in.readByte() != 0;
mTitle = in.readString();
}
public static final Creator<MovieItem> CREATOR = new Creator<MovieItem>() {
@Override
public MovieItem createFromParcel(Parcel in) {
return new MovieItem(in);
}
@Override
public MovieItem[] newArray(int size) {
return new MovieItem[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(mCaption);
out.writeString(mId);
out.writeString(mUrl);
out.writeString(plot);
out.writeDouble(rating);
out.writeString(release_date);
}
Что такое «не работает»? Пожалуйста, объясните, что вы ожидаете, и как это отличается от того, что на самом деле происходит. –
Мой список плакатов фильма должен был быть восстановлен, когда я отключил соединение (режим самолета) и повернул экран. Но они не восстанавливались. Но я получил его восстановление с выбранным ответом ниже. Благодарю. –
Ответ, который вы приняли ниже, не является отличным решением общей цели. Вы не должны обрабатывать изменения конфигурации, если не знаете, что хотите, чтобы ваше приложение не вело себя как обычное Android-приложение, которое правильно реагирует на изменения конфигурации. –