使用 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 来获取您获取的数据。
我有一个包含三个片段的 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 来获取您获取的数据。