管理片段:隐藏和显示

时间:2018-08-22 07:29:28

标签: android android-fragments kotlin

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

我有一些活动显示多个片段。我已经完成了自己的片段管理器来控制它们,并且效果很好,直到我不得不隐藏并显示一些片段以将其重用于其他问题为止。

enter image description here

我的问题是当我从片段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()
            }
        }
    }

请帮助再次显示此片段。

谢谢!

0 个答案:

没有答案