Android 管理片段:隐藏和显示

Android 管理片段:隐藏和显示,android,android-fragments,kotlin,Android,Android Fragments,Kotlin,我知道有很多关于碎片的问题,但我有一些疑问 我有一些活动显示了多个片段。我已经做了我自己的片段管理器来控制它们,它工作得非常好,直到我不得不隐藏和显示一些片段,以便在其他问题上重用它们 我的问题是,当我从片段B回到活动1时,我就是这么做的 fun hidePaymentsBackStack(manager: FragmentManager) { for (fragment in manager.fragments) { if (fragment !is

我知道有很多关于碎片的问题,但我有一些疑问

我有一些活动显示了多个片段。我已经做了我自己的片段管理器来控制它们,它工作得非常好,直到我不得不隐藏和显示一些片段,以便在其他问题上重用它们

我的问题是,当我从片段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()。。。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()
            }
        }
    }
请帮助再次显示此片段

谢谢