- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 Android 上的 FragmentTransaction 项中 docs ,说明方法replace()
与调用方法remove()
是一样的,对当前view中添加的所有fragment调用方法添加()
。在这种情况下,要恢复之前的 fragment ,我们可以使用 addBackToStack()
,这意味着事务状态仍然由 fragment 管理器管理,并且在我们从堆栈中弹出时将反转它的操作。
另一方面,当我们使用 add()
实现事务时,除了使用 add().addBackToStack()
之外,我们还可以使用 detach()
方法并使用 attach()
恢复 fragment ,这与 addBackToStack()
具有相同的行为。
那么这些场景背后的区别是什么?
最佳答案
我研究了很多,显然detach()
和addToBackStack()
的区别在于Fragment的生命周期。当我们在返回栈中添加 fragment 时,依次调用方法onPause()
、onStop()
和onDestroyView()
之后.在这种状态下, fragment 清理与其 View 关联的资源并“停留”在那里等待再次调用。从返回堆栈返回到布局调用方法 onCreateView()
只是为了 fragment 绘制其用户界面。实际上, fragment 并没有被破坏。
另一方面,当我们使用detach()
来删除或替换 fragment 时,会依次调用所有首先引用的相同方法(onPause()
,onStop()
, onDestroyView()
) 添加这两个方法:onDestroy()
,用于对 fragment 的状态进行最终清理,以及 onDetach ()
,将 fragment 分离到不再与其 Activity 相关联。
基本上,在幕后,它们没有相同的行为:使用 addToBackStack()
fragment 保持实例化,而 detach()
则不然。
关于java - 在 FragmentTransaction 中使用 add().addToBackStack()、add().detach() 和 replace().addToBackStack() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13703881/
当我使用 fragment “replace”时,新的共享元素转换可以工作,但我似乎无法让它工作 fragment “add”。在这两种情况下,我都使用相同的容器。 更多详情: Activity -布
我已经知道的是: 在fragmentTransaction.replace()之后,会调用当前fragment的onStop()函数而 fragmentTransaction.add() 不会。 在调
我正在使用 fragment ,在我的应用程序中显示两个屏幕。每个 Fragment 都有自己的一组操作栏按钮菜单布局。 在使用 FragmentTransaction replace() 方法提交
当我回顾一个项目的旧代码时,我意识到整个项目都在使用 FragmentTransaction.replace 而不是 FragmentTransaction.add。 public class Upg
我一直在我的一个项目中使用 FragmentTransaction 来设置初始 fragment //Set the fragment initially MainFragment fragment
我的 add() 方法遇到问题,该方法无法读取参数它无法将我的 BlankFragment 类作为 fragment 读取,而是读取包名称,后跟类名称(即我的代码) package com.examp
我不会替换我的 fragment ,但我有一个问题,当我在 beginTransaction() 之后调用 replace 时,Android Studio 不会给出错误。 FragmentManag
我想创建一个类,它的功能只是做一个 fragmentTransaction,但我有一个错误。下一个是我的课: package net.elinformaticoenganchado.sergio.cr
在我的应用中,我有一个 ListFragment: Fragment fragment = new MyFragment(); FragmentManager fragmentManager = g
我的 Android 代码有一个非常奇怪的行为。 真正的问题在代码之后。 我想要做的是拥有一个应用程序,该应用程序只能在手机上以纵向模式运行,而在平板电脑上可以同时以纵向和横向模式运行。为此,我在不同
我在替换 FrameLayout 容器内的 fragment 时遇到了错误。当应用程序第一次启动时一切正常,但是当我隐藏应用程序然后恢复它时,当调用 FragmentTransaction.repla
我有加载器 fragment ,并且正在从加载器 fragment 调用另一个 fragment 。一切正常,但突然我的 fragment 加载器给我一个错误。在加载器 fragment 中,我显示进
我已经在 stackoverflow 上搜索过这个问题并找到了这两个解决方案: Replacing a fragment with another fragment inside activity g
我正在学习 fragment ,下面给出的是我的第一个 fragment 程序。一个简单的项目,我有 2 个屏幕。当我单击第一个屏幕的下一步按钮时,需要显示第二个按钮。 我的目标是 Android 2
为什么我的 fragment 不能添加到后台堆栈? @Override public void onTabSelected(Tab tab, android.app.FragmentTrans
我在 FragmentStatePagedAdapter 中使用 Tabs。下面的代码来自 onOptionsItemSelected(MenuItem item) 方法: case R.id.men
我在一个 Activity 中有三个 fragment ,并在 Activity 中处理了反压。在一个 fragment 中 back press (CallingFragment) 它加载 Dial
我在一个选项卡中将一堆 FragmentTransactions 添加到后堆栈中,并且当用户选择不同的选项卡时,我想将它们全部从后堆栈中清除。我找不到从后台堆栈中清除东西的方法,只有将它们弹出的方法,
我正在构建一个平板电脑应用。在这个应用程序中,有一个带有两个 fragment 的 Activity 。第一个 fragment 是“已知”列表 fragment ,它显示来自数据库查询的简单单项布局
我的错误: java.lang.IllegalStateException: 已调用提交 我的代码: final FragmentTransaction fragmentTransaction =ge
我是一名优秀的程序员,十分优秀!