如何防止破坏碎片

时间:2020-01-23 16:51:04

标签: android android-fragments kotlin

在“活动”中,我按以下代码加载4个片段:

 supportFragmentManager.beginTransaction()
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .replace(R.id.frame, fragmentList[0])
                    .commit()

但是问题是每个片段都有很多数据,应该从服务器加载很多数据。这需要很多时间。我希望我的片段不被破坏以防止再次加载数据。我怎样才能做到这一点?有什么办法可以隐藏片段而不破坏它们,而是通过加载显示出来?

2 个答案:

答案 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 =