dha*_*sky 9 android android-architecture-navigation
我使用 jetpack 中的导航组件在我的应用程序中进行导航。我的应用程序中有 3 个屏幕,它们都是通过 Fragment 实现的:
- 搜索屏幕
- 列表屏幕
- 详细信息屏幕
当用户按下搜索(打开search screen)时,应用程序会导航到list screen加载结果并显示它们。用户选择结果之一并导航到detail screen。如果只有一个结果,应用程序list screen会detail screen自动从 导航到,从而有效地跳过列表屏幕。
问题是返回导航:当有多个结果时,我需要导航回list screen,但如果只有一个结果,我需要导航回search screen。我只想 call navigateUp,但这将带我list screen(在所有情况下)然后转发到detail screen如果只有一个结果。
FragmentTransaction直接使用时,我们可以使用replace当前片段并调用,addToBackStack只有当我们以后想返回它时才调用。使用导航组件时,我们可以只使用navigate,它的行为就像replace+ 一样addToBackStack。
如何使用架构组件实现无需添加到后台堆栈的替换行为?
最后,我设法实现了它。现在我有两个具有相同起点和目的地的动作,它们唯一的区别是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" />
Run Code Online (Sandbox Code Playgroud)
action_listFragment_to_detailFragement 当用户手动执行转换时使用,稍后应返回列表屏幕
action_listFragment_to_detailFragement_pop 当自动执行转换并且返回后不应显示列表屏幕时使用。
| 归档时间: |
|
| 查看次数: |
6004 次 |
| 最近记录: |