У меня есть RecyclerView с MyItem для хранения данных для каждой строки в RecyclerView, и все правильно реализовано и работает нормально.
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{
protected final List<MyItem> items= new ArrayList<>();
public MyAdapter (List<RVItem> list) {
if (list != null) {
items.addAll(list);
}
}
}
И элементы списка передаются из другого объекта.
public class MyObject{
private String otherThing;
private List<MyItem> items;
public someMethodToInitItems() {
items = new ArrayList<>();
items.add(...);
items.add(...);
}
public createFragment() {
Fragment f = new MyCustomFragment();
f.setAdapter(new MyAdapter(items));
// replace commit fragment...
}
}
Проблема здесь в том, что когда моя активность восстанавливается, поле private List<MyItem> items
в MyObject
тоже каким-то волшебным образом восстанавливается, но поле вроде otherThing
по-прежнему равно нулю и не восстанавливается. К вашему сведению, я никоим образом не сохранял и не восстанавливал items
. Кроме того, onSaveInstanceState
в MyCustomFragment
остается нетронутым и не переопределяется из super.
Ниже показано, как я пытаюсь сохранить и восстановить состояние фрагмента из Activity. Вот и все.
public class MyActivity{
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
getSupportFragmentManager().putFragment(outState, tag, getLastFragment());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState != null) {
Fragment fg = getSupportFragmentManager().getFragment(savedInstanceState, tag);
}
}
}
Итак, я не понимаю. Система Android выполнила эту работу? Сохранить и восстановить поле items
в MyObject
автоматически? Или должно быть что-то еще, вызывающее такое поведение.