如何正确处理导航

How to handle navigation properly

我有一个问题,我应该使用什么从托管多个片段的 1 Activity 导航。

目标是托管多个片段的 1 Activity。

我正在使用导航组件架构

我的目标是了解实现导航的最佳方式

目前实现的导航方式是这样的

class MainMenuActivity : BaseActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main_menu)
    }

    override fun onSupportNavigateUp() = findNavController(R.id.nav_host_fragment).navigateUp()
}

然后在膨胀默认片段后在片段之间导航是这样的(从片段 A 到片段 B

Fragment A : Fragment() {

onViewCreated(...){
 btn.setOnClickListener{
 findNavController.navigate(R.id.nextAction)
}

从片段 B 到片段 C

Fragment B : Fragment() {

    onViewCreated(...){
     btn.setOnClickListener{
     findNavController.navigate(R.id.nextAction)
    }

我的问题是,以这种方式在片段之间导航是一种好习惯吗?因为我觉得我在片段之间进行导航但不关心主容器 Activity.

我想做的是这样的

class MainMenuActivity : BaseActivity() {

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main_menu)
        }

        override fun onSupportNavigateUp() = findNavController(R.id.nav_host_fragment).navigateUp()

        fun navigateToFragment(id:Int){
          findNavController.navigate(id)
        }

    }

然后从每个片段调用它去一个想要的目的地

 Fragment A : Fragment() {

    onViewCreated(...){
     btn.setOnClickListener{
     requireActivity().navigateToFragment(R.id.nextAction)
    }

让 1 activity 托管一堆 Fragments 更好,还是第一种方式更好?

我认为我在片段中托管片段的第一种方式让我做 childFragmentManager 以获得这些片段的片段管理器。

并且也使得从 activity 本身扩展某些方法变得更加困难。

谢谢

您可以使用一个接口与来自两个片段的 MainActivity 进行通信,并从 MainActivity 进行片段交易。

首先,你在两种方法中做同样的事情。从片段调用 NavigationController,activity 或任何其他视图(如果重要)将 return 与您相同 NavigationController.

其次导航组件的要点是将导航与其包含的Activity分开。事实上,您所有片段的直接父级是您在 xml 中定义的 NavHostFragment。因此,activity 与片段之间的导航无关。

Third,无论做 "first way" 还是 "second way"(从技术上讲,它们与我在第一点中提到的相同)在导航时不会意味着您在片段中托管片段。相反,导航组件 会在您每次访问新目的地时用新片段替换您的容器。

最后,最好坚持开发人员的建议。尝试阅读 documentation,你看不到他们通过 Activity 改变目的地的任何地方。