判断当前Activity是否有DialogFragment显示

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
    }
相关推荐
Grackers1 小时前
Android Perfetto 系列 5:Android App 基于 Choreographer 的渲染流程
android
踩着两条虫1 小时前
AI驱动的Vue3应用开发平台深入探究(十):物料系统之内置组件库
android·前端·vue.js·人工智能·低代码·系统架构·rxjava
sam.li1 小时前
JADX MCP 原理与使用部署
android·逆向·jadx
冬奇Lab1 小时前
Android 15音频子系统(五):AudioPolicyService策略管理深度解析
android·音视频开发·源码阅读
亚历克斯神2 小时前
Flutter for OpenHarmony: Flutter 三方库 mutex 为鸿蒙异步任务提供可靠的临界资源互斥锁(并发安全基石)
android·数据库·安全·flutter·华为·harmonyos
dalancon4 小时前
SurfaceControl 的事务提交给 SurfaceFlinger,以及 SurfaceFlinger 如何将这些数据设置到对应 Layer 的完整流程
android
dalancon4 小时前
SurfaceFlinger Layer 到 HWC 通信流程详解
android
cccccc语言我来了4 小时前
Linux(9)操作系统
android·java·linux
yige454 小时前
【MySQL】MySQL内置函数--日期函数字符串函数数学函数其他相关函数
android·mysql·adb
洞见前行4 小时前
AI 当逆向工程师:Claude Code 自主分析 APK 和 so 文件,解决 Unity 插件化启动崩溃
android·人工智能