Android 自调用时导航组件返回堆栈
Android Navigation Component Backstack on self call
我正在使用 Android 导航组件来处理片段。
我有片段 A、B、C 和 E,它们都可以打开片段 D(数据略有不同)。
在片段 D 上,您可以返回或打开另一个包含不同数据的片段 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 有一个棘手的方法
在您的 parent activity
中覆盖 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" />
我正在使用 Android 导航组件来处理片段。
我有片段 A、B、C 和 E,它们都可以打开片段 D(数据略有不同)。
在片段 D 上,您可以返回或打开另一个包含不同数据的片段 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 有一个棘手的方法
在您的 parent activity
中覆盖 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" />