24

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

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

所以我创建了这个:

<?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() 等待视图,而不是活动。

我该如何解决这些人?

4

2 回答 2

11

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

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

因此,您可以做的是在 nav_graph1.xml 中使用 Activity 作为目标,并且 Activity(目标)必须有自己的 nav_graph2.xml。通过这种方式,您可以继续使用导航作为浏览您的应用程序的一种方式。

您在使用共享相同布局的多个活动时提到的谷歌文档的方式确实如此,这有点令人困惑。但我认为它们的意思是您可以将 Activity1 与 Fragment1 (nav_graph1.xml) 和 Activity2 与 Fragment2 (nav_graph2.xml) 合并​​到具有 (Fragment1 和 Fragment2) 的 Activity3 中,因为它们共享相同的布局,并且您可以使用 nav_graph .xml 指向 nav_graph2.xml

希望能帮助到你

更新:

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

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

于 2018-12-16T20:07:23.107 回答
-1

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

IllegalArgumentException: navigation destination xxx is unknown to this NavController

您可以使用这样的方向:

    findNavController().navigate(directions)
于 2021-02-02T07:36:06.840 回答