首页 文章

导航架构组件 - 活动

提问于
浏览
9

我一直在关注Navigation Architecture Component的文档,以了解这个新导航系统的工作原理 .

要从一个屏幕转到另一个屏幕,您需要一个实现 NavHost 接口的组件 .

NavHost是一个空视图,当用户浏览您的应用程序时,目的地会被换入和换出 .

但是,似乎目前只有Fragments实现 NavHost

Navigation Architecture Component的默认NavHost实现是NavHostFragment .

所以,我的问题是:

  • 即使我有一个可以用 Activity 实现的非常简单的屏幕,为了使用这个新的导航系统,需要托管一个包含实际视图的 Fragment

  • Activity 会在不久的将来实施 NavHost 界面吗?

--UPDATED--

根据ianhanniballake的回答,我了解每个活动都包含自己的导航图 . 但是如果我想使用nav组件从一个活动转到另一个活动(替换"old" startActivity call),我可以使用 activity destinations . 什么是 activity destinations 对我来说不清楚,因为docs for migration没有详细说明:

然后可以通过向导航图添加活动目标来链接单独的活动,从而在整个代码库中替换startActivity()的现有用法 .

  • 使用 ActivityNavigator 代替 startActivity 有什么好处吗?

  • 使用导航组件时,从活动开始的正确方法是什么?

2 回答

  • 1

    导航图仅存在于单个活动中 . 根据Migrate to Navigation guide<activity> 目的地可以用来从导航图中启动一个活动,但是一旦第二个活动开始,它就完全独立于原始导航图(它可以有自己的图形或只是一个简单的活动) .

    您可以通过可视化编辑器(通过点击按钮,然后选择项目中的活动)或手动添加XML,将活动目标添加到导航图:

    <activity
        android:id="@+id/secondActivity"
        android:name="com.example.SecondActivity" />
    

    然后,您可以像使用任何其他目标一样使用它来导航到该活动(即,启动活动):

    Navigation.findNavController(view).navigate(R.id.secondActivity);
    
  • 9

    我设法通过使用 ActivityNavigator 从一个活动导航到另一个活动而不托管片段 .

    ActivityNavigator(this)
                        .createDestination()
                        .setIntent(Intent(this, SecondActivity::class.java))
                        .navigate(null, null)
    

相关问题