Как сказал Мордаг, на данный момент и LifecycleActivity, и LifecycleFragment еще не реализованы. В своей документации Google говорит:
Любой пользовательский фрагмент или активность можно превратить в LifecycleOwner путем реализации встроенного интерфейса LifecycleRegistryOwner (вместо расширения LifecycleFragment или LifecycleActivity).
Однако это только половина истории, потому что, естественно, вы используете эти компоненты Lifecycle Aware, чтобы иметь возможность реагировать на ваши жизненные циклы Activity/Fragment, и с их фрагментом кода это просто не работает, потому что инициализация LifecycleRegistry с помощью Activity/Fragment как это
LifecycleRegistry lifecycleRegistry = new LifecycleRegistry(this);
получает только жизненный цикл в состоянии ИНИЦИАЛИЗИРОВАНО.
Короче говоря, для того, чтобы это работало прямо сейчас (ДО их выпуска 1.0), именно вы должны реализовать жизненный цикл действия/фрагмента, который реализует LifecycleRegistry. Итак, для каждого обратного вызова Activity/Fragment вам нужно сделать это:
public class ScoreMasterFragment extends Fragment
implements LifecycleRegistryOwner {
private LifecycleRegistry lifecycle;
@Override
public LifecycleRegistry getLifecycle() {
return lifecycle;
}
public ScoreMasterFragment(){
lifecycle = new LifecycleRegistry(this);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//more code here
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);
}
@Override
public void onStart() {
super.onStart();
//more code here
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_START);
}
@Override
public void onResume() {
super.onResume();
//more code here
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_RESUME);
}
@Override
public void onPause() {
super.onPause();
//more code here
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE);
}
@Override
public void onStop() {
super.onStop();
//more code here
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_STOP);
}
@Override
public void onDestroy() {
super.onDestroy();
//more code here
_lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY);
}
Скорее всего, это будет в коде будущих LifecycleActivity и LifecycleFragment, но до тех пор, если вы поместите свои действия/фрагменты, наблюдающие за каким-либо объектом LifecycleAware (например, LiveData), вам придется это сделать.
В случае LiveData, потому что он не будет уведомлять своих наблюдателей, если они не находятся, по крайней мере, в состоянии STARTED, а в других случаях, потому что другие компоненты LifecycleAware не могут реагировать на жизненный цикл, если его единственное состояние — INITIALIZED.
person
CarlosGoncalves
schedule
29.06.2017