Android 管理片段:隐藏和显示
我知道有很多关于碎片的问题,但我有一些疑问 我有一些活动显示了多个片段。我已经做了我自己的片段管理器来控制它们,它工作得非常好,直到我不得不隐藏和显示一些片段,以便在其他问题上重用它们 我的问题是,当我从片段B回到活动1时,我就是这么做的Android 管理片段:隐藏和显示,android,android-fragments,kotlin,Android,Android Fragments,Kotlin,我知道有很多关于碎片的问题,但我有一些疑问 我有一些活动显示了多个片段。我已经做了我自己的片段管理器来控制它们,它工作得非常好,直到我不得不隐藏和显示一些片段,以便在其他问题上重用它们 我的问题是,当我从片段B回到活动1时,我就是这么做的 fun hidePaymentsBackStack(manager: FragmentManager) { for (fragment in manager.fragments) { if (fragment !is
fun hidePaymentsBackStack(manager: FragmentManager) {
for (fragment in manager.fragments) {
if (fragment !is PaymentsFragment) {
manager.beginTransaction().hide(fragment).commit()
}
}
}
浏览活动1中显示的片段堆栈,并隐藏它们,而不是活动顶部的第一个片段
若我添加片段C,那个么一切都正常,但当我再次添加片段A时,它并没有显示在最后一个片段的顶部。如果我删除片段而不是在调用时显示
MyFragmentManager.add()。。。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()
}
}
}
请帮助再次显示此片段
谢谢