2016-02-29 4 views
0

У меня есть пользовательский 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); 

    } 
+1

Что такое «не работает»? Пожалуйста, объясните, что вы ожидаете, и как это отличается от того, что на самом деле происходит. –

+0

Мой список плакатов фильма должен был быть восстановлен, когда я отключил соединение (режим самолета) и повернул экран. Но они не восстанавливались. Но я получил его восстановление с выбранным ответом ниже. Благодарю. –

+0

Ответ, который вы приняли ниже, не является отличным решением общей цели. Вы не должны обрабатывать изменения конфигурации, если не знаете, что хотите, чтобы ваше приложение не вело себя как обычное Android-приложение, которое правильно реагирует на изменения конфигурации. –

ответ

0

добавить эту строку в файл манифеста в соответствующей деятельности теге, и деятельность будет обрабатывать вращение самой

android:configChanges="screenSize|orientation|screenLayout" 

проверить это, возможно, поможет вам

+0

вы экономите свое время, mamnunam;) –

4

Потому что у вас есть setRetainInstance(true), Fragment не разрушается/не воссоздается при вращении экрана. Fragment вызовет onSaveInstanceState() после поворота экрана, но часть onCreate() не произойдет.

-1

Используйте одиночный объект для хранения вашего списка. public enum MySingleton { INSTANCE; private MySingleton() { System.out.println («Здесь»); } приватный список mItems = new ArrayList <>(); public List getItems() { return mItems; }}

и для доступа к вашему массиву из любой точки MySingleton.INSTANCE.getItems()

-2

Вы можете попробовать реализовать метод onRestoreInstanceState(), а также. Его вызывается после метода onStart(). Вы можете прочитать об этом onRestoreInstanceState

 Смежные вопросы

  • Нет связанных вопросов^_^