自助呼叫上的Android导航组件Backstack

时间:2019-12-10 02:25:56

标签: android android-navigation

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

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

然后在片段D上可以返回或打开另一个具有不同数据的片段D。

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

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

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

enter image description here

3 个答案:

答案 0 :(得分:1)

这正是“ Single Top”选项的作用:仅在后堆栈顶部允许该目标的单个副本。

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

答案 1 :(得分:0)

从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();
    }

答案 2 :(得分:0)

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

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