Navigation 踩坑记录

1. 解决 navigate 重建 fragment 的一个可行办法

1). 在 navigate 时传入 NavOptions,设置 singleTop 。

navController.navigate(id, null, NavOptions.Builder().apply {

    setLaunchSingleTop(true)

}.build())

2). 在 xml 中 action 节点下设置 singleTop 属性。

    android:id="@+id/action_a"    

    app:destination="@id/a"    

    app:singleTop="true" />

2. popUpTo 和 popUpToInclusive 属性

    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 进行导航

你可能感兴趣的:(Navigation 踩坑记录)