如何解决Android导航组件如何打开新片段而不将其添加到backStack?
我正在使用导航组件(JetPack)进行导航。我想使用以下命令打开一个新的片段R.id.twoFragment:
navController.navigate(R.id.twoFragment)
但是我需要R.id.twoFragment不能进入backStack。我该怎么办?
解决方法
这 2 行代码使技巧有效:
app:popUpTo="@id/fragmentA"
app:popUpToInclusive="true"
如果你想从 A 到 B 并期望完成 A:
您需要通过此操作调用 B:
<fragment
android:id="@+id/fragmentA"
tools:layout="@layout/fragment_a">
<action
android:id="@+id/action_call_B"
app:destination="@+id/fragmentB"
app:popUpTo="@id/fragmentA"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/fragmentB"
tools:layout="@layout/fragment_b">
</fragment>
如果你把日志放在你的片段中,你可以看到在用这个动作调用 fragmentB 后,fragmentA 被销毁了。
指向问题 - 据我所知,不可能在不将片段 B 添加到 backstack 的情况下添加片段 B。当您调用操作时,它会自动添加
,您必须编辑navigation graph
,选择action
(两个片段之间的连接点),并设置属性popUpTo
来指示按下后退按钮时要去的地方,因此:
之后,请确保使用操作在片段之间移动,而不是实际片段的ID:
navController.navigate(R.id.actionFragmentAtoFragmentB)
例如,您可以将“第三片段”弹出窗口显示为第一个片段,而不是第二个片段。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。