代码之家  ›  专栏  ›  技术社区  ›  Víctor Albertos

导航体系结构组件-活动

  •  21
  • Víctor Albertos  · 技术社区  · 6 年前

    我一直在跟踪来自 Navigation Architecture Component 了解这个新的导航系统是如何工作的。

    要从一个屏幕返回到另一个屏幕,需要一个实现 NavHost 接口。

    导航主机是一个空视图,其中交换目的地和 当一个用户浏览你的应用程序时。

    但是,目前似乎只有片段实现 导航主机

    导航体系结构组件的默认navhost实现是navhostfragment。

    所以,我的问题是:

    • 即使我有一个非常简单的屏幕,可以用 Activity ,为了与此新的导航系统配合使用, Fragment 需要包含实际视图的宿主?

    • 威尔 活动 实施 导航主机 在不久的将来接口?

    --更新--

    根据IAnhanibalake的回答,我理解每个活动都包含自己的导航图。但是如果我想使用导航组件从一个活动转到另一个活动(替换“旧的” startActivity 呼叫),我可以使用 activity destinations . 是什么 活动目的地 我不清楚,因为 docs for migration 不要详述:

    然后可以通过将活动目的地添加到导航图中,替换整个代码库中startActivity()的现有用法来链接单独的活动。

    • 使用有什么好处吗 ActivityNavigator 而不是 开始活动 ?
    • 当使用导航组件时,从活动中走出来的正确方式是什么?
    2 回复  |  直到 6 年前
        1
  •  24
  •   ianhanniballake    6 年前

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

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

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

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

    Navigation.findNavController(view).navigate(R.id.secondActivity);
    
        2
  •  2
  •   Víctor Albertos    6 年前

    我通过使用 ActivityNavigator .

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