android - 当从 Fragment B 到 A 的 popbackstack 时保存 Fragment View(如完成活动)
问题描述
我有两个片段FRAGMENT A和FRAGMENT B。当我从片段A转到片段B时,我在 backstack 中添加片段Aaddtobackstack(null)
使用和使用replace()
方法。问题是当我popbackstack()
从FRAGMENT B --> FRAGMENT A调用然后OnCreateView()
再次onViewCreated()
调用它时,它再次在FRAGMENT A中加载回收器视图。我知道所有实例都没有再次加载,但问题是我不想再次加载视图。前任。当我打电话给完成以前的活动时,活动中的活动与我们离开时一样。
注意:我不想使用add()
方法,beginTransaction
因为它与其他片段重叠。
谢谢
解决方案
add 和 replace 之间的另一个重要区别是:replace 删除现有片段并添加新片段。这意味着当您按下返回按钮时,将创建被替换的片段并调用其 onCreateView。而 add 保留现有片段并添加一个新片段,这意味着现有片段将处于活动状态并且它们不会处于“暂停”状态,因此当按下后退按钮时不会为现有片段调用 onCreateView(在新片段之前存在的片段添加了片段)。对于fragment的生命周期事件onPause、onResume、onCreateView等生命周期事件,replace时会调用,add时不会调用。
简而言之,对于您的用例,您需要使用add
并且如果您不希望片段视图重叠,那么您可以将Fragment B
视图背景颜色替换为纯色而不是透明。
另外不要忘记添加android:clickable="true"
到您的第二个片段的父视图,以便它捕获点击并且它们不会传播到下面的片段。像这样的东西:
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:focusable="true">
推荐阅读
- node.js - 在 html 标签中使用 socket.io 时出错
- raspberry-pi - Raspberry Pi 上的 Puppeteer 无法启动 chromium-browser:错误:读取 ECONNRESET
- visual-studio-code - VSCODE 在运行/调试前提示保存无标题文件 #111850
- regex - 将部分读取行从文件转换为 tcl 中的变量
- architecture - 在 Clean Architecture 中设计实体的最佳实践是什么?
- reactjs - 自定义钩子应该包含什么
- javascript - 未捕获的 SyntaxError:JSON.parse 处的 JSON 输入意外结束(
) - python - 尝试导入包时出现dll错误,但在终端中运行相同的环境允许导入包
- date - MDX 从 2 年前开始销售到今天
- javascript - 当我显示时,jQuery 显示/隐藏切换正在将其他元素向下推