【问题标题】:Which is the best place to init ViewModel in fragment onCreateView or onCreate Method?在片段 onCreateView 或 onCreate 方法中初始化 ViewModel 的最佳位置是哪个?
【发布时间】:2018-11-21 18:35:11
【问题描述】:

我在 ViewModel 中使用实时数据。

我有一个场景,我有两个片段和一个活动。 片段 A 和片段 B。

从 Activity 中,我启动了 Fragment A(它显示名称列表,即从后端获取),当我点击 Name 时,它​​显示 Fragment B(即返回堆栈)。

现在从 Fragment B,如果我按下返回按钮,它会返回到 Fragment A,它显示一个空白屏幕,因为我在 Fragment A 的 onCreate 方法中实现了 ViewModel。

但是如果我在片段 A 的 oncreateView 方法中实现了 ViewModel,它将继续添加观察者,因为片段没有被破坏。

【问题讨论】:

  • onActivityCreated
  • 为什么 onActivityCreated
  • 可以保证Fragment附在activity中。
  • 但它会继续添加观察者
  • 通过使用onActivityCreated,我假设 ViewModel 是跨片段共享的。

标签: android android-fragments


【解决方案1】:

为避免在onCreateView 中保留额外的Observers,请将getViewLifecycleOwner() 作为LifecycleOwner 传递给LiveDataobserve 方法。这将在 fragmentView 被销毁后立即删除之前的 Observer

【讨论】:

    【解决方案2】:

    您可以在片段 A 之上添加片段 B 而不是 替换 - 这样片段 A 仍然存在,并且其所有数据都不会丢失,而且您不必调用 onCreate 或 onCreateView。

    【讨论】:

      猜你喜欢
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      相关资源
      最近更新 更多