如何在 Jetpack 中使用导航启动第二个活动



你知道它现在是官方的:谷歌官方推荐单一活动应用程序架构。但是这里有一个困难。我们有多种活动。所以当我想通过多个活动实现导航时,但我失败了。

他们说:在多个活动共享相同布局的情况下,导航图可以组合在一起,取代对活动目标的导航调用,直接在两个导航图之间导航调用。

所以我创建了这个:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:startDestination="@+id/nav_graph_firstActvity">
<activity
android:id="@+id/nav_graph_firstActvity"
android:name="io.androidedu.FirstActivity"
android:label="First Activity">
<action
android:id="@+id/nav_graph_actFirstActvity"
app:destination="@id/nav_graph_secondActvity" />
</activity>
<activity
android:id="@+id/nav_graph_secondActvity"
android:name="io.androidedu.SecondActivity"
android:label="Second Activity" />

之后,我在这里找不到多个活动的任何样本。 有一些这样的示例:

Navigation.findNavController(view).navigate(R.id.nav_graph_actFirstActvity)

但是 findNavController(( 等待的是视图,而不是活动。

我该如何解决这个问题?

导航旨在帮助片段导航,正如他们在蓝色注释中提到的

注意:导航架构组件专为具有一个主活动且具有多个片段目标的应用而设计。主活动"托管"导航图。在具有多个活动目标的应用中,每个附加活动都托管其自己的导航图。本文档稍后将讨论修改活动以承载导航。

因此,您可以做的是将活动用作nav_graph1.xml中的目标,并且该活动(目标(必须有自己的nav_graph2.xml。 这样,您就可以继续使用导航作为浏览应用的一种方式。

确实,您在使用共享相同布局的多个活动时提到的Google文档的方式有点令人困惑。但我认为他们的意思是您可以将活动 1 与片段 1 (nav_graph1.xml( 和活动 2 与片段 2 (nav_graph2.xml( 合并到活动 3 与(片段 1 和片段 2(中,因为它们共享相同的布局,您可以使用指向nav_graph2.xml nav_graph.xml

希望对你有帮助

更新:

Navigation.findNavController(view).navigate(R.id.nav_graph_actFirstActvity)

该视图可以是包含 NavHostFragment 的布局内的任何视图。它将搜索与该视图或其所有父视图对应的相应nav_graph.xml。

我发现使用操作导航到活动会给你错误:

IllegalArgumentException: navigation destination xxx is unknown to this NavController

您可以使用如下说明:

findNavController().navigate(directions)

相关内容

  • 没有找到相关文章

最新更新