Jetpack 导航组件上具有不同行为的后退和向上按钮

Back and Up Button with different behavior on Jetpack Navigation Component

我正在尝试创建一个目的地,当我按下 back/up 时应用会关闭。因此,我将 popUpTo 设置为起始目的地并将 popUpToInclusive 设置为 true。 问题是,当我按下后退按钮时,应用程序按预期关闭,但如果我按下向上按钮(工具栏后退箭头),将重新创建 activity...

导航图:

<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/main_graph"
    app:startDestination="@id/call">

    <fragment
        android:id="@+id/call"
        android:name="com.example.navigationplayground.main.CallFragment"
        android:label="Call"
        tools:layout="@layout/fragment_call" />
    <fragment
        android:id="@+id/agenda"
        android:name="com.example.navigationplayground.main.AgendaFragment"
        android:label="Agenda"
        tools:layout="@layout/fragment_agenda" >
        <action
            android:id="@+id/openDetail"
            app:destination="@id/detailFragment"
            app:popUpTo="@+id/call"
            app:popUpToInclusive="true" />
    </fragment>
    <fragment
        android:id="@+id/detailFragment"
        android:name="com.example.navigationplayground.main.DetailFragment"
        android:label="Detail"
        tools:layout="@layout/fragment_detail"/>

</navigation>

示例应用程序:https://github.com/LipeDuoli/navPlayground

从详细信息屏幕查看后退和向上按钮的行为

问题是 upback 有不同的行为。

The Up button never exits your app

If a user is at the start destination, the Up button should not be shown. When your app is launched using a deep link on another app's task, Up should take users to the hierarchical parent destination and not back to the other app.

如果您不想遵循指南,解决您的情况的一种可能方法是更改​​此行

val appBarConfiguration = AppBarConfiguration(setOf(R.id.call, R.id.agenda))

给这个

val appBarConfiguration = AppBarConfiguration(setOf(R.id.call, R.id.agenda, R.id.detailFragment))

这基本上意味着您的 start 目的地可能是上面的列表之一。而 start 表示用户在此屏幕上按下后将退出应用程序。

更多详情: