gpt4 book ai didi

android - 组件导航,带参数从后台弹出

转载 作者:行者123 更新时间:2023-12-02 12:01:56 26 4
gpt4 key购买 nike

假设我有三个 fragment ,A、B、C;

A -> B <-> C

B和C之间是循环关系。 B 或 C fragment 需要 arguments , 例子

     val args = Bundle()

args.putString("StringKeyBC", argValueBtoC)
findNavController().navigate(R.id.action_fragmentB_to_fragmentC, args, null)

args.putString("StringKeyCB", argValueCtoB)
findNavController().navigate(R.id.action_fragmentC_to_fragmentB, args, null)

问题是每次我在 B 和 C 之间移动时, fragment 都会被添加到后堆栈中,我不希望这样。如果 fragment 已经返回堆栈,我只想弹出它,但如果我使用 popBackStack我不能再添加参数了:
public boolean popBackStack(@IdRes int destinationId, boolean inclusive)

那么,如何在不每次都将它们添加到后台堆栈的情况下在两个 fragment 之间进行不断切换呢?

最佳答案

您只需添加 popUpTo 即可从回栈中弹出 fragment 。归因于导航操作。通过这种方式,您可以使用带参数的操作进行导航,但具有弹回堆栈行为。

例如,您可以添加属性 app:popUpTo="@+id/fragmentB"行动 action_fragmentC_to_fragmentB .这样,每次从 FragmentC 转到 FragmentB 时,您都会从 backstack 中弹出 FragmentC。

See the docs with example for this here.

还有另一种选择,对于您描述的情况,这可能是开销,但它允许使用 popBackStack 方法并发送参数 - 使用“导航返回结果”方法。对于它, fragment 应该使用接收包的方法实现接口(interface)(回调)。使用addOnBackStackChangedListener在 fragment 管理器中触发此方法,在调用 popBackStack 后提供所有必要的数据。 (在“如何返回结果?”部分中进行了描述:https://medium.com/google-developer-experts/using-navigation-architecture-component-in-a-large-banking-app-ac84936a42c2,此处的实现略有不同:https://medium.com/@zawadz88/david-vávra-thank-you-for-this-great-article-ae3e602b880a)

关于android - 组件导航,带参数从后台弹出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57536179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com