判断当前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
    }
相关推荐
alexhilton1 小时前
Compose中初始加载逻辑究竟应该放在哪里?
android·kotlin·android jetpack
zh_xuan1 小时前
启动RN服务端口被占用
android·react native
Code-keys4 小时前
Android Codec2 Filter 算法模块开发指南
android·算法·音视频·视频编解码
y = xⁿ5 小时前
MySQL:count(1)与count(*)有什么区别,深分页问题
android·数据库·mysql
程序员陆业聪7 小时前
Android启动全景图:一次冷启动背后到底发生了什么
android
安卓程序员_谢伟光9 小时前
m3颜色定义
android·compose
麻辣璐璐10 小时前
EditText属性运用之适配RTL语言和LTR语言的输入习惯
android·xml·java·开发语言·安卓
北京自在科技10 小时前
谷歌 Find Hub 网页端全面升级:电脑可直接管理追踪器与耳机
android·ios·安卓·findmy
Rush-Rabbit10 小时前
魅族21Pro刷ColorOS16.0操作步骤
android
爪洼传承人10 小时前
AI工具MCP的配置,慢sql优化
android·数据库·sql