使用 Android Jetpack Navigation Controller 销毁并再次创建片段

Fragment Get Destroyed And Created Again Using Android Jetpack Navigation Controller

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

当我返回(使用后退键或应用栏后退按钮)时,它会再次调用 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

作为这个问题: Support multiple back stacks for Bottom tab navigation

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

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