我知道关于碎片的问题很多,但我有一些疑问。
我有一些活动显示多个片段。我已经完成了自己的片段管理器来控制它们,并且效果很好,直到我不得不隐藏并显示一些片段以将其重用于其他问题为止。
我的问题是当我从片段B返回活动1时,这就是我要做的
fun hidePaymentsBackStack(manager: FragmentManager) {
for (fragment in manager.fragments) {
if (fragment !is PaymentsFragment) {
manager.beginTransaction().hide(fragment).commit()
}
}
}
遍历活动1中显示的片段堆栈,然后隐藏它们,而不是隐藏活动顶部的第一个片段。
如果我添加片段C没关系,但是当我再次添加片段A时,它不会显示在最后一个片段的顶部。如果我删除片段而不是在通话时显示 MyFragmentManager.add()... manager.findFragmentByTag(fragmentTag)不为null,我认为删除它们应该完全删除片段,它进入showFragment(),当我执行transaction.show时,它永远不会出现在顶部。
这是重要代码的一部分。我想念什么吗?
fun add(manager: FragmentManager, fragmentTag: String, container: Int) {
var fragment = manager.findFragmentByTag(fragmentTag)
if (fragment != null) {
showFragment(manager, fragment)
} else {
addFragment(manager, getFragment(fragmentTag, manager)!!, container, fragmentTag)
}
}
private fun addFragment(manager: FragmentManager, fragment: Fragment, container: Int, fragmentTag: String) {
val transaction = manager.beginTransaction()
transaction.add(container, fragment, fragmentTag)
transaction.commit()
}
private fun showFragment(fragmentManager: FragmentManager,
fragment: Fragment) {
fragmentManager.popBackStack()
val transaction = fragmentManager.beginTransaction()
transaction.show(fragment)
transaction.commit()
}
private fun removeFragment(manager: FragmentManager,
fragment: Fragment) {
val trans = manager.beginTransaction()
trans.remove(fragment)
trans.commit()
manager.popBackStack()
}
fun removePaymentsBackStack(manager: FragmentManager) {
for (fragment in manager.fragments) {
if (fragment !is PaymentsFragment) {
manager.beginTransaction().remove(fragment).commit()
manager.popBackStack()
}
}
}
请帮助再次显示此片段。
谢谢!