繁体   English   中英

自我调用的Android导航组件Backstack

[英]Android Navigation Component Backstack on self call

我正在使用 Android 导航组件来处理片段。

我有片段 A、B、C 和 E,它们都可以打开片段 D(数据略有不同)。

在 Fragment D 上,您可以返回或打开另一个具有不同数据的 Fragment D。

用户可以点击A->D->D->D->D->D然后返回。

有没有一种简单的方法可以直接从 D 返回 A(或 B、C、E,无论起点是什么),而无需返回所有 D 调用?

我希望我可以在动作箭头上设置参数,但没有找到任何有效的设置。

在此处输入图片说明

这正是“Single Top”选项所做的:只允许该目的地的单个副本位于后堆栈的顶部。

<action android:id="@+id/action_nav_detail_self"
    app:destination="@id/nav_detail"
    app:launchSingleTop="true"/>

直接从 D 导航到 A 有一种棘手的方法

在您的父活动中覆盖 onBackpressed

 @Override
    public void onBackPressed() {
        if (Navigation.findNavController(this,R.id.nav_host_fragment)
                .getCurrentDestination().getId() == (id of D)) {
            NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);

        navController.navigate(R.id.action_D_to_A);

        }
       else
        super.onBackPressed();
    }

您的 popUpTo 将返回到 DetailFragment ,然后由于包含而将其弹出。

<action
    android:id="@+id/action_nav_detail_self"
    app:destination="@id/nav_detail"
    app:popUpTo="@id/nav_detail"
    app:popUpToInclusive="true" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM