片段管理访问错误可见 return false

Fragment management access error visible return false

我将片段管理为显示和隐藏。 但是当我尝试访问一个片段中的方法时,我得到 null 并提出问题。 当然,方法访问在管理相同的其他片段中效果很好。

这是我的隐藏密码。

private fun replaceFragment(fragment: Fragment) {
        supportFragmentManager.beginTransaction().apply {
            if (fragment.isAdded) {
                show(fragment)
            } else {
                add(R.id.container_activity_main, fragment)
            }

            supportFragmentManager.fragments.forEach {
                if (it != fragment && it.isAdded) {
                    hide(it)
                }
            }
        }.commit()
    }

我的节目代码

supportFragmentManager.beginTransaction().show(fragmentName).commit()

fragmentName 是任意指定的问题

如果您记录以下代码,则会显示 false、false 和 true。

${fragmentName!!.isVisible}, ${fragmentName!!.isDetached} ,${fragmentName!!.userVisibleHint}

这里片段对我来说是可见的,但 isVisible 总是 return false 。 我不知道为什么会这样。

即使在hide中调用了onStop,如果你show了,调用了onCreateView,应该会有一个视图,但是视图变成了null,应用程序无法运行。

我不知道为什么会这样。 视图可见,但可见 returns false.

对于可见性问题,您应该使用:

     fragment.userVisibleHint

而不是:

     fragment.isVisible

就像documentation中提到的那样。

Fragment.isVisible 不适用于所有片段用例,仅当 fragment.isAdded == true、fragment.isHidden == false、fragment.view 时才为真! = null,fragment.view.windowToken != null 和 fragment.view.visibility == View.VISIBLE。 只有在片段的实现中满足所有这些条件,isVisible 方法才会 returns true。

commit()为异步方法,稍后完成。如果您在提交后立即输出日志 - 操作可能尚未完成