- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有什么办法,如何在不调用存储 fragment 中的 onCreateView() 的情况下清除支持 FragmentManager 的 backStack?
我了解 fragment lyfe 循环并在弹出时调用 onDestroyView() 和 onCreateView()。 http://developer.android.com/guide/components/fragments.html#Creating
我也知道如何从后台弹出所有 fragment
mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
或
for(int i = 0; i < mFragmentManager.getBackStackEntryCount(); ++i) {
mFragmentManager.popBackStack();
}
但这两种方式都是调用 onCreateView() 和其他 lyfe 循环方法,直到调用 onDestroyView() 和 onDestroy()。
但是有没有什么办法,如何通过仅从 onDestroyView() 而不是从 onCreateView() ( fragment 内部)调用来清除这个后台堆栈?
或者有什么方法可以通过清除以前的 fragment 来替换事务?
比如我想在做交易之前先弄清背景:
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentManager.beginTransaction().replace(R.id.content, fragment).commit();
最佳答案
我还没有找到解决这个问题的简单方法。我几乎可以肯定 FragmentManager
或 Fragment
没有任何功能允许您控制从堆栈中弹出 fragment 时调用哪个生命周期方法。我将概述两种可能的方法。每个都有一些不受欢迎的方面。
第一种方法假定您从后台弹出的 fragment 是 Activity 的子项。如果它们是 fragment 的子对象,该方法仍然适用,只是父对象的类型不同。
使用 getter 方法将 bool 成员 mClearingBackStack
添加到 Activity (或父 fragment )。当您开始完全清除后台堆栈时,仅 设置 bool 值。在要禁用处理的 fragment 生命周期方法中,获取标志并相应地修改处理。对于 onCreateView()
到 onDestroyView()
, fragment 将被附加并且宿主 Activity 可用 getActivity()
。使用标志的 getter 方法将其转换为您的 Activity 类。
因为 popBackStack()
是异步的,清除标志必须在堆栈展开完成后才能完成。我没试过,但我想在调用 popBackStack() 后发布一个 Runnable
清除标志应该有效。因为 Runnable 需要排在队列的末尾,View.post()必须使用而不是 Activity.runOnUiThread() .另一种方法是调用 executePendingTransactions()等待堆栈展开完成。
第二种方法更简洁,如果您的设计可以容纳它的话。创建一个占位符 fragment ,它是您的 Activity 的子项,也是所有其他 fragment 的父项。对于您现在拥有的所有 fragment 事务,使用新 fragment 的 FragmentManager
,使用 getChildFragmentManager() 获得.当您想要清除所有这些事务时,而不是弹出子 fragment 管理器的堆栈,而是删除或替换 Activity fragment 管理器中的父 fragment 。当父 fragment 被移除时,它的所有子 fragment 都被销毁并经历拆解步骤、onDestroyView()、onDestroy() 等,但不是如果它的后台堆栈被展开会发生的所有步骤.这种方法比第一种方法更简单且更易于维护,但需要您重新处理 fragment 层次结构。这种方法的另一个问题是您必须添加一些代码来处理具有 fragment 层次结构的返回操作。描述了问题和各种解决方案here .
关于android - 如何清除支持FragmentManager的backStack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31361090/
我有一个网站,我正在通过学校参加比赛,但我在清除 float 元素方面遇到了问题。 该网站托管在 http://www.serbinprinting.com/corey/development/
我有一个清除按钮,需要使用 JQuery 函数清除该按钮单击时的 TextBox 值(输入的)。 最佳答案 您只需将单击事件附加到按钮即可将输入元素的值设置为空。 $("#clearButton").
我们已经创建了一个保存到 CoreData 然后同步到 CloudKit 的 iOS 应用程序。在测试中,我们还没有找到一种方法来清除应用程序 iCloud 容器中的数据(用于用户私有(private
这是一个普遍的问题,也是我突然想到并且似乎有道理的问题。我看到很多人使用清除div 并且知道这有时不受欢迎,因为它是额外的标记。我最近开始使用 因为它接缝代表了它的实际用途。 当然都引用了:.clea
我有两个单选按钮。如果我检查第一个单选按钮下面的数据将填充在组合框中。之后我将检查另一个单选按钮,我想清除组合框值。 EmployeeTypes _ET = new EmployeeTypes(
我一直在玩 Canvas ,我正在尝试制作一个可以移动和跳跃的正方形,移动部分已经完成,但是跳跃部分有一个问题:每次跳跃时它都会跳得更快 here's a jsfiddle 这是代码: ///////
我该如何在 Dart 上做到这一点? 抓取tbody元素后,我想在其上调用empty(),但这似乎不存在: var el = query('#search_results_tbody'); el.em
我需要创建一个二维模拟,但是在设置新的“框架”时,旧的“框架”不会被清除。 我希望一些圆圈在竞技场中移动,并且每个循环都应删除旧圆圈并生成新圆圈。一切正常,但旧的没有被清除并且仍然可见,这就是我需要改
无论我使用set statusline将状态行更改为什么,我的状态行都不会改变。看起来像 ".vimrc" 39L, 578C
在 WPF 应用程序中,我有一个 ListView 绑定(bind)到我的 ViewModel 上的一个 ObservableCollection。 在应用程序运行期间,我需要删除并重新加载集合中的所
我有一个大型程序,一个带有图形的文本扭曲游戏。在我的代码中的某处,我使用 kbhit() 我执行此代码来清除我的输入缓冲区: while ((c = getchar()) != '\n' && c !
我正在将所有网站的页面加载到主索引页面中,并通过将 href 分成段并在主域名后使用 .hash 函数添加段来更新 URL 显示,如下所示: $('a').click(function(event)
我有一个带有 的表单和 2 控件来保存和重置表单。我正在触发 使用 javascript __doPostBack()函数并在其中传递一个值 __EVENTARGUMENT如果面板应该重置。 我的代
我目前有一堆 UIViewController,每个都是在前一个之上呈现的模式 ViewController。我的问题是我不需要一堆 UIViewController,我只需要最后一个。因此,当出现新
我在一个类中有一些属性方法,我想在某个时候清除这个属性的缓存。 示例: class Test(): def __init__(self): pass @property
在此Test Link我试图将标题和主站点导航安装到博客脚本的顶部。 我清除:两者;在主要网站脚本上工作,但现在把所有东西都扔到了一边。尝试了无数次 fixex 都没有成功!提前感谢 Ant 指点解决
我似乎无法正确清除布局。看this 我无法阻止左栏中的元素向下推右栏中的元素。谁能帮忙? Screenshot with some pointy arrows (死链接) 最佳答案 问题标记/样式似
我希望能够在某个类 (sprite-empos) 之后清除 '' 中的内容,想知道是否有不添加任何新类或不使用 js 的方法(我在下面尝试过不工作)? 为了明确它是“985”,我想在某个视口(view
我想清除ptr_array boost::ptr_array a; ... a.clear(); // missing 如何清理 ptr 容器? 最佳答案 它应该表现得像一个数组,您不能在 C++
这是我使用多 map 制作的一个简单的事件系统;当我使用 CEvents::Add(..) 方法时,它应该插入并进入多重映射。问题是,当我触发这些事件时, multimap 似乎是空的。我确定我没有调
我是一名优秀的程序员,十分优秀!