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

Android无法从LocationsFragment返回至ProjectsFragment问题求助

问题分析与解决方案

你遇到的问题核心原因是:当前NavGraph中nav_projects和nav_locations是同级的直接子节点,调用navController.navigate(R.id.nav_locations, projectBundle)时,Navigation默认会将当前的ProjectsFragment从回退栈中移除,直接替换为LocationsFragment,导致回退时无法回到ProjectsFragment。

方案一:在NavGraph中添加显式Action

修改你的mobile_navigation.xml,给nav_projects添加指向nav_locations的action,让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/mobile_navigation"
    app:startDestination="@+id/nav_home">

    <fragment
        android:id="@+id/nav_home"
        android:name="com.bradley.kon.ui.dashboard.DashboardFragment"
        android:label="@string/menu_dashboard"
        tools:layout="@layout/fragment_home" />

    <fragment
        android:id="@+id/nav_projects"
        android:name="com.bradley.kon.ui.projects.ProjectsFragment"
        android:label="@string/menu_projects"
        tools:layout="@layout/fragment_projects" >
        <!-- 新增action定义 -->
        <action
            android:id="@+id/action_nav_projects_to_nav_locations"
            app:destination="@+id/nav_locations" />
    </fragment>

    <fragment
        android:id="@+id/nav_locations"
        android:name="com.bradley.kon.ui.locations.LocationsFragment"
        android:label="@string/menu_locations"
        tools:layout="@layout/fragment_locations" />

    <fragment
        android:id="@+id/nav_settings"
        android:name="com.bradley.kon.ui.settings.SettingsFragment"
        android:label="@string/menu_settings"
        tools:layout="@layout/fragment_settings" />
</navigation>

然后修改跳转代码,使用这个action进行导航:

NavController navController =
            Navigation.findNavController(getActivity(), R.id.nav_host_fragment_content_main);

navController.navigate(R.id.action_nav_projects_to_nav_locations, projectBundle);

方案二:使用NavOptions显式保留回退栈

如果不想修改NavGraph,可以在调用navigate时传入NavOptions,强制保留ProjectsFragment在回退栈中:

NavController navController =
            Navigation.findNavController(getActivity(), R.id.nav_host_fragment_content_main);

NavOptions navOptions = new NavOptions.Builder()
        // 第二个参数为false,表示不弹出nav_projects本身,保留在回退栈中
        .setPopUpTo(R.id.nav_projects, false)
        .build();

navController.navigate(R.id.nav_locations, projectBundle, navOptions);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:54:53