当前位置: 首页 > 知识库问答 >
问题:

导航架构组件-活动

松鸣
2023-03-14

我一直在遵循导航架构组件中的文档,以了解这个新的导航系统是如何工作的。

要从一个屏幕到另一个屏幕进行/返回,您需要一个实现NavHost接口的组件。

NavHost是一个空视图,当用户在应用程序中导航时,目的地会随之交换。

但是,似乎目前只有片段实现了< code>NavHost

导航架构组件的默认NavHost实现是NavHostFragment。

所以,我的问题是:

> < li>

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

活动会在不久的将来实现NavHost接口吗?

--更新--

根据ianhannibalake的回答,我知道每个活动都包含自己的导航图。但是如果我想使用nav组件从一个活动到另一个活动(替换“旧的”start active调用),我可以使用活动目的地。什么是活动目的地我不清楚,因为迁移的文档没有详细说明:

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

  • 使用ActivityNavigator而不是startActivity有什么好处吗?
  • 使用导航组件时,从活动开始的正确方法是什么?

共有3个答案

姬英武
2023-03-14

我还设法通过使用ActiveNavigator从一个活动导航到另一个活动,而无需托管片段。

科特林:

val activityNavigator = ActivityNavigator( context!!)
                activityNavigator.navigate(
                    activityNavigator.createDestination().setIntent(
                        Intent(
                            context!!,
                            SecondActivity::class.java
                        )
                    ), null, null, null
                )

爪哇语:

ActivityNavigator activityNavigator = new ActivityNavigator(this);
activityNavigator.navigate(activityNavigator.createDestination().setIntent(new Intent(this, SecondActivity.class)), null, null, null);

nav_graph.xml

<fragment android:id="@+id/fragment"
        android:name="com.codingwithmitch.navigationcomponentsexample.SampleFragment"
        android:label="fragment_sample"
        tools:layout="@layout/fragment_sample">

    <action
            android:id="@+id/action_confirmationFragment_to_secondActivity"
            app:destination="@id/secondActivity" />

</fragment>
<activity
        android:id="@+id/secondActivity"
        android:name="com.codingwithmitch.navigationcomponentsexample.SecondActivity"
        android:label="activity_second"
        tools:layout="@layout/activity_second" />

科特林:

lateinit var navController: NavController
navController = Navigation.findNavController(view)
navController!!.navigate(R.id.action_confirmationFragment_to_secondActivity)
唐恺
2023-03-14
匿名用户

通过使用< code>ActivityNavigator,我成功地从一个活动导航到另一个活动,而没有托管一个片段。

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

松新
2023-03-14

导航图仅存在于单个活动中。根据迁移到导航指南,

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

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

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

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

 类似资料:
  • 我目前正在学习新的Android导航架构组件 (https://developer.android.com/topic/libraries/architecture/navigation/). 我有点混淆了它的动机和概念,以下是我的不确定性: Android导航架构组件是否旨在消除在单个应用程序中使用多个活动的需要?这意味着,整个应用程序只需要一个单一活动,所有其他页面都将是片段? 在应用程序中使

  • 我不知道如何使用新的导航架构组件,从我的主屏幕(带有连接到底部应用程序栏的浮动操作按钮)导航到没有应用程序栏的另一个屏幕。 当我点击晶圆厂时,我想要我的下一个屏幕(片段?)从右侧滑入。问题是我应该把我的

  • 我正在我的应用程序中尝试导航架构组件。早些时候,我使用片段事务来实现以下功能。基本上,我想从导航。 碎片- 如果我正在使用导航组件并尝试 然后结果是FragmentA被FragmentB替换并且背景片段不可见。 我想知道一个解决方案,如果导航架构组件允许的话。 附言:我听说过嵌套导航主机,但从内部使用它好吗。 更新: FragmentB将有进一步交易的行动,例如: 碎片- 当用户按下后退按钮时,片

  • 是否可以将新的导航架构组件与DialogFragment一起使用?我必须创建自定义导航器吗? 我很乐意将它们与导航图中的新功能结合使用。

  • 我正在尝试使用导航组件导航到另一个活动(登录)。 目前,活动1具有导航图1,活动2具有导航图2。 我在中为添加了一个目标。当我导航时,我得到一个空白屏幕,尽管有一个导航图,其中包含另一个片段的起始目标。 没有被调用,或者至少没有被我在中的断点击中。 当我在navGraph1中嵌套navGraph2时,我可以导航到navGraph2中的起始目标片段。navGraph2中的这个起始目的地位于compo

  • 当我从deeplink(用户点击URL)打开应用程序并按下后退按钮时,我希望用户导航到我导航图中的前一个片段,但它只是退出应用程序。 文件中说,反向导航的工作方式应该与用户自然到达屏幕的方式相同。 我可以在导航图中指定所需的backbackback吗?或者可以在deeplink后自动形成Backback?对于旧版本的库,我发现在按back press键后,它应该导航到导航图的根目录,但事实并非如此