gpt4 book ai didi

android - fragment popbackstack 行为在 25.1.0 和 25.1.1 中被破坏

转载 作者:太空宇宙 更新时间:2023-11-03 13:12:39 25 4
gpt4 key购买 nike

自从支持版本 25.1.0 和最新的 25.1.1 以来,我在 fragment 替换/添加方面出现了奇怪的行为。已报告 25.1.0 的问题 Android - fragmentTransaction.replace() not works on support library 25.1.0

但是现在在 25.1.1 中我遇到了类似的问题。为了重现我创建的示例应用程序的行为,您可以在 https://github.com/holoduke/fragmenttest 找到它

它基本上是一个带有 fragment 容器的 Activity 。有几个可用的 fragment ,它们将通过按下按钮动态地相互替换。我们首先从 mainActivity 本身添加 FragmentA。

    FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

Fragment f = new FragmentA();
fm.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
f.setRetainInstance(false);
ft.replace(R.id.fragmenttarget, f);
ft.addToBackStack(null);
ft.commit();

所有好的作品都很好。在 25.0.1、25.1.0 和 25.1.1 中

现在在 fragmentA 中有 3 个按钮,它们都将用 fragmentA、fragmentB 或 fragmentC 替换当前 fragment

添加 fragment B和C的代码与 fragment A几乎相同,只是我们没有定义:

fm.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

添加 fragment B 或 C 时,将执行以下代码:

    FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

Fragment f = new FragmentB();
f.setRetainInstance(false);
ft.replace(R.id.fragmenttarget, f);
ft.addToBackStack(null);
ft.commit();

在 25.0.1、25.1.0 和 25.1.1 中仍然一切正常。如果您多次添加 fragmentB 和 C,则 fm.getBackStackEntryCount() 会增加。很好。

现在是奇怪的部分。我们想用 popStackImmediate 添加 FragmentA(以清除历史记录)此处 3 个支持版本的行为都变得疯狂。

假设您在所有 3 个版本中执行以下 bavhiour:

  1. 启动应用
  2. 用 fragment B替换
  3. 用 fragment C替换
  4. 用 fragment B替换
  5. 用 fragment C替换
  6. 用 fragment A替换

在 25.0.1 中一切正常。清除后台堆栈并在 FragmentA 中调用 onCreateView 和 ActivityCreated。

在 25.1.0 中,在用 FragmentA 替换后,onCreateView 和 ActivityCreated 被调用了 2 次。不好。

在 25.1.1 中更糟。替换为 fragmentA 后,对于后台堆栈中的所有 View ,将调用 onCreateView 和 ActivityCreated。这很有趣吧 :)

只需试用我的示例应用程序并查看 logcat。更改 app.gradle 文件中的支持版本以查看差异。

如果有人也能认识到这个问题,我会很高兴,这样我们就可以找到克服甚至解决这个问题的方法。

最佳答案

好吧,我遇到了同样的问题,通过比较 25.0.1 -> 25.1.1 FragmentManager.class 找到了解决方案。尝试使用 setAllowOptimization FragmentTransaction 的方法。

关于android - fragment popbackstack 行为在 25.1.0 和 25.1.1 中被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42003639/

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