【发布时间】:2020-10-02 16:09:54
【问题描述】:
我刚刚看到 onActivityCreated() 将来会被弃用。我尝试实现 LifecycleOwner 和 LifecycleObserver 模式,但我不太确定我在这里做什么。
我正在使用 NavigationComponent,这意味着:
- 我有一个 MainActivity
- 我有一个 MainFragment,实例化为 home 片段
- 我有多个可以从此主片段访问的片段
出于某些原因,我需要知道何时从所有这些片段(MainFragment 和子片段)创建活动
从我目前所见,我需要:
- 在 MainActivity 中,
getLifecycle().addObserver(new MainFragment())。并为所有子片段执行此操作(这很冗长) - 在片段中,实现 LifecycleObserver 和
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
private void onCreateEvent() {
Timber.i("%s MainActivity created", TAG);
}
这似乎运作良好,但我有一些问题:
-
addObserver(new MainFragment()语法让我感到不安。看起来我们正在创建一个新的片段实例,而片段通常使用 navGraph 中定义的导航进行实例化。 - 正如我之前所说,如果我的 MainFragment 有 10 个子片段,我将不得不声明 11 个观察者?奇怪
- 我是否必须在活动生命周期的某个时刻清除这些观察者?
实现它的正确方法是什么?
编辑 1:
要回答为什么我需要知道活动何时创建的问题:
我需要这个,因为我需要访问我的 MainActivity 视图模型(new ViewModelProvider(requireActivity()).get(ViewModel.class)。要调用 requireActivity() 或 getActivity(),我需要知道活动何时创建(使用 onActivityCreated() 很容易)。
数据绑定是用我的 MainActivity 和这个 viewmodel 实现的。此活动的布局是托管一个加载程序,以显示何时执行网络请求。
我可以执行来自 MainFragment 和来自子片段的请求。当我从这些片段之一执行请求时,我需要启用这个加载器视图,当我取回数据时,我需要隐藏这个加载器。
是的,所有这些片段都在图中
【问题讨论】:
-
“出于某些原因,我需要知道何时创建活动” - 您能否准确解释这些原因是什么?您能否在
onActivityCreated()中包含您当前拥有的代码?此外,您的MainFragment和“子”片段与您对导航组件的使用有何关联?它们都在图表中还是其他? -
我编辑了帖子来回答你的问题
标签: android android-lifecycle android-jetpack