我想在LiveData
中使用Fragment
来观察某些数据的变化。现在假设:
Fragment A
和Fragment B
在Activity
中都有自己的容器布局,这意味着我们将分别为它们及其FragmentTransaction#add()
或{由于没有onPause()
操作,因此添加(UI更改)期间不会调用{1}}。onResume()
观察者,它将观察某些数据的变化,并根据该数据更新UI。关键是:我们要为更改播放一些动画,而不仅仅是天真地调用属性设置器(例如FragmentTransaction#replace()
)。例如,也许动画是我们调用LiveData
添加B后,A被视为对用户不可见。但是,TextView#setText()
或其通过调用RecyclerView.Adapter#notifyItemInserted()
的{{1}}的生命周期仍然处于Fragment A
和View
状态。结果,动画将在O观察到数据更改后播放,但用户从一开始就看不到它。
我们如何解决这个问题?任何想法或答案表示赞赏。预先感谢。
答案 0 :(得分:1)
如果要添加B(占用了为A分配的空间),则最好也删除片段A。这样做会带来很多好处:
1)您解决了问题。 (也就是说,如果您使用viewLifeCycleOwner
来观察您的LiveData
)
2)由于Fragment A的视图将被拆除,因此可以减少应用程序的内存消耗。
这是
这意味着我们将分别调用FragmentTransaction#add()
也不是问题。请注意,您可以链接FragmentTransaction
,例如:
supportFragmentManager.beginTransaction()
.replace(view1.id, fragmentB)
.remove(fragmentA)
.commit()