我正在使用jetpack中的导航组件在我的应用程序中进行导航。
我的应用程序中有3个屏幕,所有这些屏幕都是通过Fragment实现的:
-搜索屏幕
-列表屏幕
-详细信息屏幕
当用户按下搜索(在search screen
上)时,应用导航到list screen
并显示结果。用户选择其中一个结果,然后导航到detail screen
。如果只有一个结果,则应用会自动从list screen
导航到detail screen
,有效地跳过列表屏幕。
问题是向后导航:当有多个结果时,我需要导航回list screen
,但是如果只有一个结果,则我需要导航回search screen
。我只想打电话给navigateUp
,但这会带我到list screen
(在所有情况下),然后如果只有一个结果,就转到detail screen
。
直接使用FragmentTransaction
时,只有当我们以后想返回它时,我们才能与replace
一起使用addToBackStack
并调用navigate
。
使用导航组件时,我们只能replace
,它的行为就像addToBackStack
+ {{1}}。
如何使用体系结构组件实现不向后添加替换的行为?
答案 0 :(得分:1)
最后,我设法实现了它。
现在,我有两个动作的起点和终点都相同,它们的唯一区别是popUpTo
属性。
<action
android:id="@+id/action_listFragment_to_detailFragement"
app:destination="@id/detailFragment"/>
<action
android:id="@+id/action_listFragment_to_detailFragement_pop"
app:destination="@id/detailFragment"
app:popUpTo="@id/listFragment"
app:popUpToInclusive="true" />
action_listFragment_to_detailFragement
用于用户手动执行过渡,并且稍后应返回列表屏幕
action_listFragment_to_detailFragement_pop
用于自动执行转换,并且返回后不应显示列表屏幕。
答案 1 :(得分:0)
在导航组件中,可以使用与NavController.popBackStack(int action)
类似的方法addToBackStack(null)
。
答案 2 :(得分:0)
override fun navigateTo(navController: NavController) {
val action =
FirstFragmentDirections.actionFirstFragmentToSecondFragment()
navController.navigate(action)
}
附注。 Vel_daN:爱你所做的。?