DialogFragment一种情况是在当前Activity上启动,一种情况是在Fragment上启动,判断当前fragmentManager上是否有,以及遍历判断子fragment上是否有,即可确定是否有DialogFragment展示。
使用方式:
// supportFragmentManager为当前Activity的fragmentManager
hasDialogFragment(supportFragmentManager)
private fun hasDialogFragment(fragmentManager: FragmentManager): Boolean {
if (fragmentManager.fragments.find {
it is DialogFragment
} != null) {
// 存在弹框
return true
}
if (fragmentManager.fragments.find {
// 子片段管理器中含有弹框
fragmentHasDialogFragment(it)
} != null) {
// 子Fragment上含有弹框
return true
}
return false
}
/**
* 遍历查询fragment上是否有dialogFragment
*/
private fun fragmentHasDialogFragment(fragment: Fragment): Boolean {
val childFragments = fragment.childFragmentManager.fragments
if (childFragments.isEmpty()) {
return false
}
childFragments.forEach {
if (it is DialogFragment) {
return true
}
if (fragmentHasDialogFragment(it)) {
return true
}
}
return false
}