Ответ 1
Ну, иногда фрагменты могут немного запутываться, но через некоторое время вы привыкнете к ним и узнаете, что они все-таки ваши друзья.
Если в методе onCreate() вашего фрагмента вы выполните: setRetainInstance (true); Видимое состояние ваших просмотров будет сохранено, иначе оно не будет.
Предположим, что фрагмент называется "f" класса F, его жизненный цикл будет выглядеть так: - При копировании/прикреплении/показывая это, это методы f, которые вызываются в следующем порядке:
F.newInstance();
F();
F.onCreate();
F.onCreateView();
F.onViewStateRestored;
F.onResume();
В этот момент ваш фрагмент будет виден на экране. Предположим, что устройство повернуто, поэтому информация о фрагменте должна быть сохранена, это поток событий, вызванных вращением:
F.onSaveInstanceState(); //save your info, before the fragment is destroyed, HERE YOU CAN CONTROL THE SAVED BUNDLE, CHECK EXAMPLE BELLOW.
F.onDestroyView(); //destroy any extra allocations your have made
//here starts f restore process
F.onCreateView(); //f view will be recreated
F.onViewStateRestored(); //load your info and restore the state of f view
F.onResume(); //this method is called when your fragment is restoring its focus, sometimes you will need to insert some code here.
//store the information using the correct types, according to your variables.
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("foo", this.foo);
outState.putBoolean("bar", true);
}
@Override
public void onViewStateRestored(Bundle inState) {
super.onViewStateRestored(inState);
if(inState!=null) {
if (inState.getBoolean("bar", false)) {
this.foo = (ArrayList<HashMap<String, Double>>) inState.getSerializable("foo");
}
}
}