片段管理访问错误可见 return false
Posted
技术标签:
【中文标题】片段管理访问错误可见 return false【英文标题】:Fragment management access error visible return false 【发布时间】:2022-01-13 22:19:50 【问题描述】:我将片段管理为显示和隐藏。 但是当我尝试在一个片段中访问该方法时,我得到了 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 总是返回 false 。 我不知道为什么会这样。
即使在 hide 中调用了 onStop,如果显示,则调用 onCreateView 并且应该有一个视图,但是视图变为 null 并且应用程序不起作用。
我不知道为什么会这样。 视图可见,但可见返回 false。
【问题讨论】:
【参考方案1】:对于可见性问题,您应该使用:
fragment.userVisibleHint
代替:
fragment.isVisible
就像documentation中提到的那样。
Fragment.isVisible 不适用于所有片段用例,只有在 fragment.isAdded == true、fragment.isHidden == false、fragment.view != null、fragment.view.windowToken != 时才能为 true null 和 fragment.view.visibility == View.VISIBLE。 只有在片段的实现中满足所有这些条件时,isVisible 方法才会返回 true。
【讨论】:
我的问题是为什么 fragment.isVisible 返回 false 明白。你是说即使屏幕可见,只要其中任何一个为假就返回假? @Duseop 是的,完全正确【参考方案2】:commit() 是一个异步方法,将在稍后完成。如果您在提交后立即输出日志 - 操作可能尚未完成
【讨论】:
即使你不马上打印出来,它也是那样出来的。我已经在屏幕显示后每隔 10 秒拉出一次日志,但还是那样。以上是关于片段管理访问错误可见 return false的主要内容,如果未能解决你的问题,请参考以下文章
当添加权限为 False 时,Django-grappelli 添加按钮在内联中可见
更改组件可见性时 Android Studio 空对象引用错误