You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android多模块嵌套导航如何从LoginFragment跨模块跳转至HomeFragment

解决方案

你可以通过以下两种方式实现跨嵌套导航图的跳转,两种方式都可以满足模块化场景下的跳转需求:

方案1:配置导航Action跳转(推荐)

该方式类型安全,支持统一配置转场动画、回退栈清理规则,后续维护成本更低:

  1. 修改authentication模块的导航图staging_authentication_nav_graph.xml,在LoginFragment节点下添加跳转Action:
<fragment
    android:id="@+id/loginFragment"
    android:name="com.ocatave.featureauthentication.LoginFragment"
    android:label="login_fragment"
    tools:layout="@layout/login_fragment">
    <!-- 新增跳转至home模块导航图的action -->
    <action
        android:id="@+id/action_loginFragment_to_homeNavGraph"
        app:destination="@id/staging_home_nav_graph"
        app:popUpTo="@id/staging_authentication_nav_graph"
        app:popUpToInclusive="true" />
</fragment>

这里配置popUpTo的作用是登录成功后将认证模块的所有页面从回退栈中清除,避免用户按返回键回到登录页。

  1. 在LoginFragment中登录成功的逻辑处调用跳转即可:
// Kotlin 代码示例
findNavController().navigate(R.id.action_loginFragment_to_homeNavGraph)

// Java 代码示例
Navigation.findNavController(requireView()).navigate(R.id.action_loginFragment_to_homeNavGraph);

由于staging_home_nav_graph的起始目的地已经配置为HomeFragment,跳转后会自动打开HomeFragment,无需额外指定页面。

方案2:直接指定目的地ID跳转(无需修改导航图)

如果不需要复用跳转规则,也可以直接在代码中指定跳转目标,配合NavOptions配置回退栈规则:

// Kotlin 代码示例
val navOptions = NavOptions.Builder()
    .setPopUpTo(R.id.staging_authentication_nav_graph, true)
    .build()
findNavController().navigate(R.id.staging_home_nav_graph, null, navOptions)
// Java 代码示例
NavOptions navOptions = new NavOptions.Builder()
    .setPopUpTo(R.id.staging_authentication_nav_graph, true)
    .build();
Navigation.findNavController(requireView()).navigate(R.id.staging_home_nav_graph, null, navOptions);

注意事项

由于你的两个子导航图都已经在主导航图中通过<include>标签声明,所以在子模块中直接引用staging_home_nav_graph、staging_authentication_nav_graph这些ID都是可以正常识别的,不会出现资源找不到的问题。

内容的提问来源于stack exchange,提问作者WISHY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:27:01