片段管理访问错误可见 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()为异步方法,稍后完成。如果您在提交后立即输出日志 - 操作可能尚未完成
我将片段管理为显示和隐藏。 但是当我尝试访问一个片段中的方法时,我得到 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()为异步方法,稍后完成。如果您在提交后立即输出日志 - 操作可能尚未完成