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
从详细信息屏幕查看后退和向上按钮的行为
问题是 up
和 back
有不同的行为。
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
表示用户在此屏幕上按下后将退出应用程序。
更多详情:
我正在尝试创建一个目的地,当我按下 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
从详细信息屏幕查看后退和向上按钮的行为
问题是 up
和 back
有不同的行为。
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
表示用户在此屏幕上按下后将退出应用程序。
更多详情: