gpt4 book ai didi

android - 如何防止在 Fragment 不可见时激活 LiveData 观察者

转载 作者:行者123 更新时间:2023-12-04 15:45:54 25 4
gpt4 key购买 nike

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

  • Fragment AFragment BActivity 中有自己的容器布局,这意味着我们将调用 FragmentTransaction#add()分别为他们和他们的onPause()onResume()由于没有 FragmentTransaction#replace(),在添加(UI 更改)期间不会被调用行动。
  • B 的容器比 A 的大,也就是说如果添加 B,用户就看不到 A。
  • 在 A 中有一个 LiveData观察者命名为O,它会观察一些数据的变化,并据此更新UI。关键是:我们想为改变播放一些动画,而不是天真地调用属性 setter (如 TextView#setText() ) .例如,也许动画是我们调用 RecyclerView.Adapter#notifyItemInserted() 之后播放的动画。

  • 添加 B 后,A 被认为对用户不可见。但是, Fragment A 的生命周期或其 View调用 getViewLifecycleOwner()仍在 STARTEDRESUMED状态。因此,动画会在 O 观察到的数据变化后播放,但用户从一开始就看不到它。

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

    最佳答案

    如果您要添加 B(这会占用应该分配给 A 的空间),最好也删除 fragment A。您会因此获得多种好处:

    1)你解决了你的问题。 (如果你使用 viewLifeCycleOwner 观察你的 LiveData )
    2)您减少了应用程序的内存消耗,因为 Fragment A 的 View 将被拆除。

    这是

    which means we will call FragmentTransaction#add() separately



    也不是问题。请注意,您可以链接 FragmentTransaction如:
    supportFragmentManager.beginTransaction()
    .replace(view1.id, fragmentB)
    .remove(fragmentA)
    .commit()

    关于android - 如何防止在 Fragment 不可见时激活 LiveData 观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55821907/

    25 4 0