我想要的正确行为是:
Fragment A -> Fragment B -> Fragment C -> Fragment A
我目前的工作:
popBackStack()
,但在这里一切都很顺利
我真的需要backbackbackentrycount
与管理器中包含的片段相同。
有人知道我做错了什么吗?
我的代码:
Fragment fragment1 = fragmentManager.findFragmentByTag("NavigationFragment_");
if (fragment1 != null) {
fragmentManager.beginTransaction()
.setTransition(TRANSIT_FRAGMENT_FADE)
.remove(fragment1)
.commit();
}
fragmentManager.beginTransaction()
.addToBackStack(backstack)
.setTransition(TRANSIT_FRAGMENT_OPEN)
//.remove(getFragmentManager().findFragmentByTag(NavigationFragment_.class.getSimpleName()))
.add(R.id.fragmentContainer, fragment, fragment.getClass().getSimpleName())
.commit();
我已经搜索了一段时间没有结果的解决方案,所以请不要将此标记为重复。
提前感谢。
FragmentManager的后栈仅在两种情况下更新:
addToBackStack()
没有其他操作会影响后台堆栈-没有addToBackStack()
的其他碎片事务只会更改当前状态,不会影响调用popBackStack()
等时发生的情况。
如果希望堆栈从A
转到A-
fragmentManager.beginTransaction()
.replace(R.id.fragmentContainer, fragmentB)
.addToBackStack("b")
.commit();
然后,您希望您的后栈为
A-
// First pop B
fragmentManager.popBackStack("b", FragmentManager.POP_BACK_STACK_INCLUSIVE)
// Then addToBackStack C
fragmentManager.beginTransaction()
.replace(R.id.fragmentContainer, fragmentC)
.addToBackStack("c")
.commit();
这将确保在将FragmentC
添加到后面的堆栈之前,从堆栈中删除FragmentB
。
类似地,如果要删除
FragmentC
并返回FragmentA
,只需从后堆栈中弹出它:
// Pop C, returning back to A
fragmentManager.popBackStack("c", FragmentManager.POP_BACK_STACK_INCLUSIVE)
注意:在同一个FragmentManager中混合回栈FragmentTransaction和常规FragmentTransaction从来都不是一个好主意,因为
popBackStack()
没有考虑到FragmentManager
的当前状态,而是盲目地反转上的FragmentTransaction返回堆栈(即,最后的FragmentTransaction withaddToBackStack()
。
如果您来到这里是因为调用了popBackStack(),但getBackStackEntryCount()似乎没有更新,那么您可能需要尝试popBackStackImmediate()。
popBackStack()是异步的——它将请求排入pop队列,但在应用程序返回其事件循环之前,不会执行该操作。
一、简介 碎片是什么?把一个完整的页面理解成由许多块组成,而每一个“块”我们就可认为就是一个”碎片“! 这样,我们在页面放置一些碎片,在以后的维护维护中,只需要对碎片进行维护! 碎片功能支持完全手动更新,并且可以搜索内容,可恢复数据至任何历史版本,常用于专题制作和首页频繁更新的内容。 您可以在模板中直接插入 {pc:block pos="index_block_1"}{/pc} 格式的碎片标签,然
我想在收到一些HTTP请求的响应后,更新几个<code>片段 。-- 活动 适配器 碎片样本 日志显示位置0,1处的片段的<code>updateData</code>工作良好。但是对于位置2处的片段,它会导致错误。 我发现的区别是适配器没有为位置2调用,这意味着没有调用的。因此不存在。 我的直觉告诉我,问题一定来自适配器的工作流或fragmentManager事务。但是作为一个Android初学
有没有办法,在不调用存储片段中的onCreateView()的情况下清除support FragmentManager的backbackback? 我理解片段lyfe循环,并在弹出时调用onDestroyView()和onCreateView()。http://developer.android.com/guide/components/fragments.html#Creating 我还知道如何
我有一个用于交换片段的框架布局。我使用导航抽屉,每个菜单项都会打开一个片段。所以可以肯定的是,在所有应用程序周期中,屏幕上同时只有一个片段(因此只有一个活动)。下面您可以找到我的片段开始方法 所以当我在androidstudio上检查时,每次我用上述方法替换fragment时,内存使用量都会增加<代码>碎片事务。删除不会释放碎片,而替换也不会释放碎片。所以,过了一段时间,如果我点击每一个菜单项,一
我有一个关于片段管理的问题。 我已经编写了一个基于碎片的抽屉活动。每次点击菜单项后,您都会看到一个空片段。 我如何实现这一点?
我的照片应用程序里有一个片段。当用户编辑照片时, null 我的片段异步任务: 我在调用getParentFragmentManager()时遇到异常。我提到了一个相关的帖子,Fragment MyFragment not attached to Activity,但它与Fragment not be Activity相关。所以我不确定添加是否可以解决我的问题。理想情况下,在尝试弹出backSta