Android 如何使用supportFragmentManager隐藏片段?

Android 如何使用supportFragmentManager隐藏片段?,android,android-fragments,fragmentmanager,Android,Android Fragments,Fragmentmanager,以下是我的尝试: private inline fun FragmentManager.inTransaction(func: FragmentTransaction.() -> FragmentTransaction) { beginTransaction().func().addToBackStack(null).commit() } private fun AppCompatActivity.addFragment(fragment: Fragment, f

以下是我的尝试:

private inline fun FragmentManager.inTransaction(func: FragmentTransaction.() -> FragmentTransaction) {
        beginTransaction().func().addToBackStack(null).commit()
    }

private fun AppCompatActivity.addFragment(fragment: Fragment, frameId: Int){
        supportFragmentManager.inTransaction { add(frameId, fragment) }
    }

private fun AppCompatActivity.showFragment(fragment: Fragment) {
        supportFragmentManager.inTransaction{show(fragment)}
    }

private fun showFragmentView(fragment: Fragment){

        // Hide the current Fragment
        if (supportFragmentManager.fragments.isNotEmpty()) {
            val currentFragment = supportFragmentManager.fragments.last()
            if (currentFragment != null) {
                supportFragmentManager
                        .beginTransaction()
                        .hide(currentFragment)
                        .commit()
            }
        }

        // Add or Show
        if (!fragment.isAdded) {
            addFragment(fragment, sendFragFrame.id)
        } else {
            showFragment(fragment)
        }
    }
它正确地将片段添加到帧中,但是当我试图隐藏它时,什么也没有发生,它保持可见,第二个片段看不见。有人能解释为什么会这样吗

以这种方式访问片段不是好的做法(而且很可能行不通)

  if (supportFragmentManager.fragments.isNotEmpty()) {
            val currentFragment = supportFragmentManager.fragments.last()
            if (currentFragment != null) {
                supportFragmentManager
                        .beginTransaction()
                        .hide(currentFragment)
                        .commit()
您应该添加带有
标记的片段
,并在需要删除片段时按标记获取片段,然后执行事务

有关更多信息,请参阅对此的评论:

好吧,令人尴尬的是,我的问题是我无意中将Fragment2中的布局与Fragment1中的布局进行了交换……因此它是有效的,但因为它们共享了一个布局,所以您无法直观地看到它。如果可以的话,我会删除这篇文章,但我会把它留在这里,作为对我作为开发人员的耻辱的致敬。

val currentFragment=supportFragmentManager.fragments.last()
不能保证这是真的。不过,我也不会使用这种方法。这可能会导致您的用户遇到问题。