如何在Fragment不可见时阻止LiveData观察者被激活

问题描述 投票:0回答:1

我想在LiveData中使用Fragment来观察一些数据的变化。现在让我们假设:

  1. Fragment AFragment B都有自己的容器布局在Activity,这意味着我们将分别为他们调用FragmentTransaction#add()并且他们的onPause()onResume()在添加(UI更改)期间不会被调用因为没有FragmentTransaction#replace()动作。
  2. B的容器大于A,这意味着如果添加B,则用户无法看到A.
  3. 在A中有一个名为O的LiveData观察者,它将观察一些数据的变化,并根据它更新UI。关键是:我们想要为变化播放一些动画,而不是只是天真地调用属性setter(如TextView#setText())。例如,也许动画是我们调用RecyclerView.Adapter#notifyItemInserted()后播放的动画

添加B后,A被视为对用户不可见。然而,通过调用Fragment AView或其getViewLifecycleOwner()的生命周期仍然在STARTEDRESUMED状态。因此,动画将在O观察到数据更改后播放,但用户无法从一开始就看到它。

我们怎样才能解决这个问题?任何想法或答案都表示赞赏。提前致谢。

android android-fragments android-lifecycle android-livedata fragment-lifecycle
1个回答
1
投票

如果你要添加B(它占用了据称为A分配的空间),最好还删除片段A.你可以获得多种好处:

1)你解决了你的问题。 (如果你在观察你的qazxsw poo时使用qazxsw poo)那么2)你减少你的应用程序的内存消耗,因为片段A的视图将被拆除。

这是

这意味着我们将分别调用FragmentTransaction#add()

也不是问题。请注意,您可以链接viewLifeCycleOwners,例如:

LiveData
© www.soinside.com 2019 - 2024. All rights reserved.