具有多模块 android 的嵌套图形导航?
Nested graph navigation with multi module android?
我的应用程序有 3 个模块
- 应用
- 身份验证
- 家
app 模块在 gradle
中添加了两个其他模块
app 模块有主图,其中包含来自身份验证和 home 模块的嵌套图
我在身份验证模块中有登录片段,我想导航到位于主页模块中的主页片段
下面是我的图表
主图
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/staging_nav_graph"
app:startDestination="@id/splashFragment2">
<fragment
android:id="@+id/splashFragment2"
android:name="splash.SplashFragment"
android:label="fragment_splash"
tools:layout="@layout/fragment_splash" >
<action
android:id="@+id/action_open_login"
app:destination="@id/staging_authentication_nav_graph"
app:popUpTo="@+id/staging_nav_graph"
app:popUpToInclusive="true"/>
</fragment>
<include app:graph="@navigation/staging_authentication_nav_graph" />
<include app:graph="@navigation/staging_home_nav_graph" />
</navigation>
身份验证模块图
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/staging_authentication_nav_graph"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/loginFragment"
android:name="com.ocatave.featureauthentication.LoginFragment"
android:label="login_fragment"
tools:layout="@layout/login_fragment">
</fragment>
</navigation>
这是主图
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/staging_home_nav_graph"
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.octave.home.HomeFragment"
android:label="home_fragment"
tools:layout="@layout/home_fragment" />
</navigation>
如何从 loginfragment 导航到 homeFragment?
在深度链接的帮助下我能够做到这一点
在导航图中
<fragment
android:id="@+id/homeFragment"
android:name="com.octave.home.HomeFragment"
android:label="HomeFragment" >
<deepLink app:uri="octave://home"/>
</fragment>
和导航代码
findNavController().navigate(Uri.parse("octave://home"))
我的应用程序有 3 个模块
- 应用
- 身份验证
- 家
app 模块在 gradle
中添加了两个其他模块app 模块有主图,其中包含来自身份验证和 home 模块的嵌套图
我在身份验证模块中有登录片段,我想导航到位于主页模块中的主页片段
下面是我的图表
主图
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/staging_nav_graph"
app:startDestination="@id/splashFragment2">
<fragment
android:id="@+id/splashFragment2"
android:name="splash.SplashFragment"
android:label="fragment_splash"
tools:layout="@layout/fragment_splash" >
<action
android:id="@+id/action_open_login"
app:destination="@id/staging_authentication_nav_graph"
app:popUpTo="@+id/staging_nav_graph"
app:popUpToInclusive="true"/>
</fragment>
<include app:graph="@navigation/staging_authentication_nav_graph" />
<include app:graph="@navigation/staging_home_nav_graph" />
</navigation>
身份验证模块图
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/staging_authentication_nav_graph"
app:startDestination="@id/loginFragment">
<fragment
android:id="@+id/loginFragment"
android:name="com.ocatave.featureauthentication.LoginFragment"
android:label="login_fragment"
tools:layout="@layout/login_fragment">
</fragment>
</navigation>
这是主图
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/staging_home_nav_graph"
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.octave.home.HomeFragment"
android:label="home_fragment"
tools:layout="@layout/home_fragment" />
</navigation>
如何从 loginfragment 导航到 homeFragment?
在深度链接的帮助下我能够做到这一点
在导航图中
<fragment
android:id="@+id/homeFragment"
android:name="com.octave.home.HomeFragment"
android:label="HomeFragment" >
<deepLink app:uri="octave://home"/>
</fragment>
和导航代码
findNavController().navigate(Uri.parse("octave://home"))