Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
setRetainInstance(true) — прекрасный метод. Только стоит упомянуть, что его нельзя использовать в паре с Loaderpublic class ModelStorage extends Fragment {
public static final String TAG = ModelStorage.class.getCanonicalName();
private CallbackModel model = new CallbackModel();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
public CallbackModel getCallbackModel(){
return model;
}public class CallbackModel {
private CallbackObservable observable = new CallbackObservable();
...
public void runTask() {
// some work
....
observable.notifyOnSucces();
}
public void registerObserver(CallbackObserver observer) {
observable.registerObserver(observer);
}
public void unregisterObserver(CallbackObserver observer) {
observable.unregisterObserver(observer);
}
public interface CallbackObserver {
void onSucces();
void onFail();
}
private class CallbackObservable extends Observable<CallbackObserver> {
public void notifyOnSucces() {
for (CallbackObserver observer : mObservers) {
observer.onSucces();
}
}
public void notifyOnFail() {
for (CallbackObserver observer : mObservers) {
observer.onFail();
}
}
}
}public class SomeFragment extends BaseFragment implements CallbackModel.CallbackObserver {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ModelStorage storage = (ModelStorage) getActivity()
.getSupportFragmentManager()
.findFragmentByTag(ModelStorage.TAG);
if (storage != null) {
model = storage.getCallbackModel();
} else {
final ModelStorage newStorage = new ModelStorage();
getActivity()
.getSupportFragmentManager()
.beginTransaction()
.add(newStorage, ModelStorage.TAG)
.commit();
}
model.registerObserver(this);
}
@Override
public void onDestroy() {
super.onDestroy();
model.unregisterObserver(this);
}
@Override
public void onSuccess() {
}
@Override
public void onFail() {
}
}
Сохранение состояния фрагментов (Fragment)