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

问题描述 投票:7回答:2

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

他们说:如果多个活动共享相同的布局,则可以组合导航图,将导航调用替换为活动目标,以直接在两个导航图之间导航调用。 in here

所以我创造了这个:

<?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" />

之后我找不到任何多个活动的样本in here.有一些样本:

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

但是findNavController()等待一个视图,而不是一个活动。

我怎么能解决这个问题呢?

android android-architecture-components android-jetpack android-architecture-navigation
2个回答
3
投票

导航旨在帮助碎片上的导航,正如他们在蓝色here中的注释中提到的那样

注意:导航体系结构组件适用于具有一个具有多个片段目标的主要活动的应用程序。主要活动“托管”导航图。在具有多个活动目标的应用中,每个附加活动都会托管自己的导航图。修改主机导航活动将在本文档的后面部分讨论。

因此,您可以做的是在nav_graph1.xml中使用Activity作为目标,并且Activity(目标)必须拥有自己的nav_graph2.xml。这样您就可以继续使用导航来浏览应用。

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

希望能帮助到你

更新:

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

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


0
投票

不要将多个活动放在单个导航xml文件中。导航旨在解决活动中导航,这意味着它只能优雅地支持片段。要开始另一项活动,就像context.startActivity(intent)这样的老方式。您可以在此google示例中找到更多详细信息:

https://github.com/googlesamples/android-sunflower

© www.soinside.com 2019 - 2024. All rights reserved.