在“活动”中,我按以下代码加载4个片段:
supportFragmentManager.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.replace(R.id.frame, fragmentList[0])
.commit()
但是问题是每个片段都有很多数据,应该从服务器加载很多数据。这需要很多时间。我希望我的片段不被破坏以防止再次加载数据。我怎样才能做到这一点?有什么办法可以隐藏片段而不破坏它们,而是通过加载显示出来?
答案 0 :(得分:1)
先使用.add(containerId, newFragment)
然后使用.hide(currentFragment)
代替替换
编辑:
supportFragmentManager.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.add(R.id.frame, fragmentList[0])
.hide(fragmentList[1]) // assumed that fragmentList[1] is your current fragment
.commit()
答案 1 :(得分:0)
诸如Activity或Fragment之类的UI控制器不应负责请求和加载数据。创建一个ViewModel来处理数据的加载及其引用。您需要它的片段可以通过LiveData观察数据。
如果将Activity实例传递给ViewModelProvider,则ViewModel的寿命将与Activity一样长,而不仅是整个Fragment的寿命:
// in onViewCreated():
model = ViewModelProvider(requireActivity()).get(MyViewModel::class.java)
如果您使用的是KTX:
// a fragment class property:
val model: MyViewModel by activityViewModels()
model =