У меня есть действие и несколько фрагментов, которые оно заменяет внутри структуры кадра. Каждый фрагмент содержит макет, накачанный из XML, с несколькими настраиваемыми представлениями. Внутри этих представлений я хочу подписаться на события жизненного цикла в этих представлениях с помощью LifecycleObserver. Мой взгляд на Котлин:
class MyView(context: Context) : View(context, null, 0): LifecycleObserver {
init {
(getContext() as LifecycleOwner).lifecycle.addObserver(this)
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResume() {
// code
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onPause() {
// code
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroy() {
lifecycle.removeObserver(this)
}
}
Проблема в том, что когда один фрагмент удаляется и заменяется другим, представления в первом фрагменте не получают событие onPause . Они также не получают onResume , когда я возвращаюсь к нему из второго фрагмента. Представления получают onPause только тогда, когда вся активность приостановлена, но они не знают об изменениях жизненного цикла в фрагментах . Я проследил это до разметки разметки, которая используется для раздувания разметки XML-фрагмента, она передает активность как параметр context для представлений. Вот как создается экземпляр разметки в классе Fragment вспомогательной библиотеки:
/** @deprecated */
@Deprecated
@NonNull
@RestrictTo({Scope.LIBRARY_GROUP})
public LayoutInflater getLayoutInflater(@Nullable Bundle savedFragmentState) {
if (this.mHost == null) {
throw new IllegalStateException("onGetLayoutInflater() cannot be executed until the Fragment is attached to the FragmentManager.");
} else {
LayoutInflater result = this.mHost.onGetLayoutInflater();
this.getChildFragmentManager();
LayoutInflaterCompat.setFactory2(result, this.mChildFragmentManager.getLayoutInflaterFactory());
return result;
}
}
mHost - это FragmentActivity, которое содержит этот фрагмент. Следовательно, LayoutInflater, который передается в onCreateView () фрагмента, содержит ссылку на FragmentActivity в качестве контекста. Таким образом, мнения эффективно соблюдают жизненный цикл деятельности.
Как мне сделать, чтобы мои пользовательские представления наблюдали за событиями жизненного цикла содержащего их фрагмента?