1. 解决 navigate 重建 fragment 的一个可行办法
1). 在 navigate 时传入 NavOptions,设置 singleTop 。
navController.navigate(id, null, NavOptions.Builder().apply {
setLaunchSingleTop(true)
}.build())
2). 在 xml 中 action 节点下设置 singleTop 属性。
<action
android:id="@+id/action_a"
app:destination="@id/a"
app:singleTop="true" />
2. popUpTo 和 popUpToInclusive 属性
<action
android:id="@+id/action_a"
app:destination="@id/a"
app:popUpTo="@id/b"
app:popUpToInclusive="true" />
popUpTo 表示该 action 在导航到 destination 所指定的 fragment 时,先将在栈中该属性对应的 fragment 之上的 fragment 弹出,再实例化 destination fragment 并压入栈中,popUpToInclusive 为 true 则表示 popUpTo 对应的 fragment 也一并弹出。
如:栈中存在 A、B、C 三个 fragment,入栈顺序为 :A -> B -> C
此时 navigate(R.id.action_a) 后栈顺序为:A1 -> A2
若同时设置 singleTop 为 true,则栈顺序为:A2
使用 Compose 进行导航
网友评论