解决DialogFragment闪烁或者闪屏的问题

本文介绍了如何解决DialogFragment在快速加载和关闭时产生的闪烁或黑屏现象。通过分析DialogFragment的源码,找到了问题根源并提出了两种解决方案,包括自定义dismiss方法以避免使用dismissAllowingStateLoss()和调整Dialog样式。
摘要由CSDN通过智能技术生成

今天修复一个历史遗留BUG;项目中的dialog基本都是通过DialogFragment来实现的,但是同时也有个问题,比如再加载网页的时候,加载之前xshow出个dialog,网页加载完后dismiss,但是如果网络很好,网页加载的速度很快,不到1s就加载完成的话,就会出现一个问题,界面会闪一下,如果你的Activity的主题是默认的话,就表现为黑屏一下,如果是透明的主题,就表现为可以看到上一个页面,然后立马恢复虽然这个闪屏的时间很短,估计只有几ms,但是看着还是很不爽的。

  • 最开始的解决方案是想办法设置一个dialog的最短显示时间,这样就不会出现这个闪屏的情况,但是后面的情况很复杂,设置一个最短的显示时间就要用到定时器,达到最短时间后再dismiss,如果调用延时的dismiss后要立马finish当前页面的话,就会出现定时器结束后获取不到dialog对应的fragment管理器。
public void hideLoading() {
   
        long cancelTime = System.currentTimeMillis() - loadingStartTime;
        if (cancelTime > LOAD_MIN_TIME){
   
            if (null != mLoadingFragment) {
   
                mLoadingFragment.dismissAllowingStateLoss();
            }
            return;
        }
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
   
            @Override
            public void run() {
   
                if (null != mLoadingFragment) {
   
                    mLoadingFragment.dismissAllowingStateLoss(
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值