使用 Android Jetpack 导航控制器销毁和重新创建 Fragment

时间:2021-07-15 16:22:19

标签: android android-fragments android-navigation android-jetpack-navigation android-navigationview

我有一个包含三个片段的活动。它将使用导航控制器在片段之间导航。但是每次我移动到另一个片段时,前一个片段都会被破坏。

当我返回时(使用返回键或应用栏返回按钮),它会再次调用 onCreateView。

问题是,我有一个名为 fetchProducts() 的方法,它应该在片段上创建视图时运行一次。因为片段总是被销毁,所以我的 fetchProducts 总是被再次调用,我不想这样做。

顺便说一句,我正在使用 viewBinding。

这是我的一些代码:

@AndroidEntryPoint
class HomeMainFragment : Fragment(R.layout.fragment_main_home) {

    private var _binding: FragmentMainHomeBinding? = null
    private val binding get() = _binding!!

    private val viewModel: HomeMainViewModel by viewModels()

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        _binding = FragmentMainHomeBinding.bind(view)
        setupRecyclerView()
        observe()
        goToCreateProductPage()
        fetchProducts()
    }
    
    //...


    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }

}

如何保持片段不被破坏?特别是使用 viewBinding

1 个答案:

答案 0 :(得分:1)

由于这个问题: Support multiple back stacks for Bottom tab navigation

您可以使用导航库版本 2.4.0-alpha04 和片段版本 1.4.0-alpha04 来支持返回堆栈。

是的,您应该考虑使用 ViewModel 来获取您获取的数据。