片段 popbackstack 行为在 25.1.0 和 25.1.1 中被破坏

2023-12-31

自从支持版本 25.1.0 和最新的 25.1.1 以来,我在片段替换/添加方面遇到了奇怪的行为。 25.1.0 已报告问题Android -fragmentTransaction.replace() 不适用于支持库 25.1.0 https://stackoverflow.com/questions/41158071/android-fragmenttransaction-replace-not-works-on-support-library-25-1-0

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

它基本上是一个带有片段容器的活动。有几个片段可用,按下按钮即可动态地相互替换。我们首先从 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

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

fm.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

当添加片段 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() 就会增加。那挺好的。

现在是奇怪的部分。 我们想添加带有 popbackStackImmediate 的 FragmentS (以清除历史记录) 这里 3 个支持版本的行为都变得疯狂。

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

  1. 启动应用程序
  2. 替换为片段B
  3. 替换为片段C
  4. 替换为片段B
  5. 替换为片段C
  6. 替换为片段A

在 25.0.1 中一切正常。清除backstack并在FragmentA中调用onCreateView和ActivityCreated。

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

在 25.1.1 中情况更糟。替换为fragmentA后,对于backstack中的所有视图,都会调用onCreateView和ActivityCreated。现在这很有趣,对吧:)

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

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


好吧,我遇到了同样的问题,并通过比较 25.0.1 -> 25.1.1 找到了解决方案FragmentManager.class。尝试使用设置允许优化 https://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html#setAllowOptimization(boolean)FragmentTransaction 的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

片段 popbackstack 行为在 25.1.0 和 25.1.1 中被破坏 的相关文章

  • 基于 Spring Boot 的测试中的上下文层次结构

    我的 Spring Boot 应用程序是这样启动的 new SpringApplicationBuilder sources ParentCtxConfig class child ChildFirstCtxConfig class sib
  • 使用 alpha 通道叠加两个 ggplot2 stat_密度2d 图

    我想叠加两个ggplot2使用 alpha 通道进行绘图 结果图像显示两个数据集 这是我的测试数据 data read table text P1 1 0 4 nP2 0 0 2 nP3 2 1 8 nP4 2 2 6 nP5 0 5 2
  • 无论我如何尝试,“netsh wlan startHostednetwork”命令都不起作用

    C Windows system32 gt netsh wlan 显示驱动程序 接口名称 无线网络连接 Driver DW1501 Wireless N WLAN Half Mini Card Vendor Broadcom Provide
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调
  • python从二进制文件中读取16字节长的双精度值

    我找到了蟒蛇struct unpack 读取其他程序生成的二进制数据非常方便 问题 如何阅读16 字节长双精度数出二进制文件 以下 C 代码将 1 01 写入二进制文件三次 分别使用 4 字节浮点型 8 字节双精度型和 16 字节长双精度型
  • 将 r 中的一列从出生日期更改为年龄

    我是第一次使用 data table 我的表中有大约 400 000 个年龄的列 我需要将它们从出生日期转换为年龄 做这个的最好方式是什么 我一直在思考这个问题 到目前为止对这两个答案都不满意 我喜欢用lubridate 就像 KFB 所做
  • mysql 查询选择当月的所有行?

    我有一个名为 startdate 的日期时间类型的列 我必须获取当前月份的开始日期和结束日期之间的所有行 即从 1 11 2014 到 30 11 2014 select from your table where year curdate
  • 如何(安全)将 Python 对象发送到我的 Flask API?

    我目前正在尝试构建一个 Flask Web API 它能够在 POST 请求中接收 python 对象 我使用 Python 3 7 1 创建请求 使用 Python 2 7 运行 API 该 API 设置为在我的本地计算机上运行 我试图发
  • 如何从地址簿中获取一个人的电话号码?

    我想做的就是让用户从地址簿中选择一个号码 我在这个问题中找到了代码 如何从地址簿联系人获取电话号码 iphone sdk https stackoverflow com questions 286207 how to get a phone
  • 即使调整大小,如何获得屏幕的精确中间位置

    好的 这个问题有两部分 当我做一个JFrame 并在其上画一些东西 即使我将宽度设置为 400 并使其在一个项目击中它时 当然 允许项目宽度 它会反弹回来 但由于某种原因 它总是偏离屏幕约 10 个像素 有没有办法解决这个问题 或者我只需要
  • LifeCycleAware Fragment 中的片段生命周期事件

    我有一个生命周期感知片段和一个LifecycleObserver class public class MyFragment extends Fragment Override public void onCreate Nullable B
  • 定义在文本小部件中双击时选择哪些字符

    在 Windows 上 双击文本小部件中的单词也将选择连接的标点符号 有什么方法可以定义您想要选择的角色吗 tcl wordchars该变量的值是一个正则表达式 可以设置它来控制什么被视为 单词 字符 例如 通过双击 Tk 中的文本来选择单
  • 混合本机/托管可执行文件中的最终托管异常处理程序?

    我有一个使用 clr 编译的 MFC 应用程序 并且我正在尝试为未捕获的托管异常实现最终处理程序 对于本机异常 重写CWinApp ProcessWndProcException works 杰夫的书中提到的两个事件代码项目文章 http
  • 无法安装最新版本的 Numpy (1.22.3)

    我正在尝试安装最新版本的 numpy 即 1 22 3 但看起来 pip 无法找到最后一个版本 我知道我可以从源代码本地安装它 但我想了解为什么我无法使用 pip 安装它 PS 我有最新版本的pip 22 0 4 ERROR Could n
  • 如何在 ASP.NET Core 中注入泛型的依赖关系

    我有以下存储库类 public class TestRepository Repository
  • 如何访问我的 Android 程序中的联系人

    我正在制作一个短信应用程序 并且想要访问我的 Android 应用程序中的联系人 我想访问联系人 就像他们在实际联系人列表中一样 选择后 我需要返回到我的活动 在其中我可以向该人发送短信 或者是否可以访问存储联系人的数据库 我的代码如下所示
  • Android GetPTLAFormat 上的 Phonegap 错误

    我们正在开发一个使用 jQuery 移动和电话间隙的应用程序 一切似乎都工作正常 但是当在连接的 Android 手机上运行应用程序时 我们在 Eclipse logcat 中看到大量类似这样的错误 0 GetPTLAFormat inva
  • 如何统计订单总价?

    我有这些表 Orders id status user id address id 1 await 1 1 products id name price quantity 1 test1 100 5 2 test2 50 5 order p
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • 运行更高级的查询时,对象关闭时不允许执行操作

    当我尝试在 ASP 页上运行更高级的 SQL 查询时 出现以下错误 对象关闭时不允许进行操作 当我运行此代码时 它正在工作 sql SELECT distinct team FROM tbl teams rs open sql conndb
  • spring 4.0.0 与 hibernate 4.30 的兼容性[重复]

    这个问题在这里已经有答案了 我在用春季4 0 0释放罐子 休眠科 4 3 0罐子在我的spring hibernate项目 我遇到一个错误org hibernate engine FilterDefinition没有找到 实际上 在旧的 h
  • axios 内部 for 循环

    我正在尝试在 for 循环内发送 axios 请求 但循环甚至在 axios 之前就已完成 以下是我的代码 let findEmail async gt for var i 0 i lt csvData length i axios pos
  • 如何在 Swift 中组合两个 Dictionary 实例?

    我如何附加一个Dictionary到另一个Dictionary使用斯威夫特 我正在使用AlamoFire将 JSON 内容发送到的库REST https en wikipedia org wiki Representational stat
  • 如何异步使用 Tornado 和 Redis?

    我正在尝试如何异步使用 Redis 和 Tornado 我找到了龙卷风 redis https github com leporo tornado redis但我需要的不仅仅是添加一个yield在代码中 我有以下代码 import redi
  • 如何用图像的像素创建图表?

    现在 我有一个图像 我想生成一个加权图 G V E 其中 V 是顶点集 E 是边集 图像中的每个像素作为图中的节点 但我不知道该怎么做 有人可以帮助我吗 最好是蟒蛇 非常感谢 问题补充 很抱歉我对问题的描述不够清楚 我的目标是使用图像的像素
  • 以编程方式设置 Jetty 配置以增加允许的 URL 长度

    我们使用嵌入式 Jetty 9 3 1 v20150714 并遇到了problem https stackoverflow com q 19549163 421049其中我们的长查询 URL 与其他标头相结合 比允许的长度要长 The so
  • 如何获取/设置 Firebase Cloud Functions v1 环境变量

    我以旧方式使用 Cloud Functions 包中的环境变量functions config 命令 但由于我更新到 v1 0 2 即使通过JSON parse process env FIREBASE CONFIG 就像文档告诉我的那样
  • 从机上的 Jenkins 工作空间路径不一致

    我们设置了一些共享工作空间的工作 各个分支的工作流程是 构建一个名为的大型 C 项目foo 执行多个下游测试 每个测试都使用foo 我们通过分配Use custom workspace构建工作区的下游作业领域 最近 我们选择了一个分支 并将
  • 在 iPhone X 上的 ARKit ARSession 期间从前置摄像头录制视频

    我正在使用一个ARSession结合一个ARFaceTrackingConfiguration来追踪我的脸 同时 我想从 iPhone X 的前置摄像头录制视频 为此 我使用AVCaptureSession但当我开始录音时ARSession
  • MongoDB 复合键

    我刚刚开始使用 MongoDb 我注意到我得到了很多重复的条目记录 而我本打算是唯一的 我想知道如何对我的数据使用复合键 并且我正在寻找有关如何创建它们的信息 最后 我使用 Java 来访问 mongo 和 morphia 作为我的 ORM
  • $(document).ready() 未针对 ajax 加载的内容执行

    在返回的部分页面中不执行 document ready 的原因可能是什么 两次工作正常 但第三次更新 html 后没有任何反应 alert html alert PopUpItem PopUpItem html html alert in
  • 在 Woocommerce 结帐中为特定选定的运输选项添加正文类别

    如果访问者在 Woocommerce 结账页面上处于特定的送货选项中 我会尝试向页面正文添加一个类 我已经完成了以下操作 但它没有添加课程 有人可以帮忙吗 add filter body class bbloomer wc product
  • 在使用 Transform 旋转时调整 UIView 的大小

    When my UIView使用变换属性旋转 CGAffineTransformMakeRotation 我需要拖动它的一个角 例如右下角 来调整它的大小 在此过程中 当用户拖动角时 视图的角必须跟随用户的手指 并通过增加 2 个边 右下角
  • 什么时候只需要 PartialEq 而不需要 Eq 比较合适?

    我在读铁锈书 https doc rust lang org book appendix 03 derivable traits html并尝试了解用例PartialEq and Eq特征 我意识到PartialEq适用于不一定是自反的关系
  • 动态代理和检查异常

    如何让我的动态代理抛出已检查的异常 我需要一个透明的接口包装器 它有时会抛出已检查的异常 例如IOException 没有第 3 方 AOP 或编写我自己的代理是否可以 手动修改接口的所有 20 个方法也不是一个选择 正如康拉德上面提到的
  • 进入设置屏幕

    我想从我的应用程序中打开 设置 gt 声音和显示 gt 电话铃声 屏幕 我怎样才能做到这一点 根据您的需要 有几种选择可以从您的应用程序中调出 铃声 设置屏幕 如果您想调出通常可通过系统设置访问的实际首选项屏幕 让用户通过应用程序修改手机的
  • 文件上传“multipart/form”异常 org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException

    我尝试使用 Apache Commons 进行文件上传 但抛出以下异常 org apache commons fileupload FileUploadBase InvalidContentTypeException 请求不包含 multi
  • Dropwizard 中的自定义 Jetty 过滤器

    我正在尝试在 Dropwizard 实例中添加自定义标头过滤器 以检查请求的版本是否与 Dropwizard 实例的版本同步 我看到你可以使用FilterBuilder添加码头CrossOriginFilters 但是 我无法弄清楚如何设置
  • 片段 popbackstack 行为在 25.1.0 和 25.1.1 中被破坏

    自从支持版本 25 1 0 和最新的 25 1 1 以来 我在片段替换 添加方面遇到了奇怪的行为 25 1 0 已报告问题Android fragmentTransaction replace 不适用于支持库 25 1 0 https st