Dialog管理工具类

这是我的第一篇文章
作者:LiZuanxiao
微信:libi_520_com


2018年03月09日15:07:46
github更新了代码实现方式 github


公司项目中大量用到了Dialog。有时,频繁调用接口会出现Dialog反复弹出的情况。so,老大就交代了任务:

  • 避免Dialog重复弹出
  • 在上一个Dialog消失500ms之间,不能弹出,500ms之后,可以弹出新Dialog

就是这样,我开始了一个Dialog工具类的开发。
上最终代码吧

public class DialogMananger {
  private MDialog dialog;
  private Activity activity = null;
  //最好放到全局类中初始化
  private ActivityStack activityStack;
  private Handler handler;
  private boolean canShow = true;//500ms内不允许重复显示
  /**
   *
   */
  private int flag = -1;

  public static final class Builder {
    private DialogMananger manager;

    public Builder() {
      this.manager = new DialogMananger();
      this.manager.activityStack = new ActivityStack();
    }

    public Builder withDelay() {
      manager.handler = new Handler();
      return this;
    }

    public DialogMananger build() {
      return manager;
    }
  }

  private void dialogSingleton() {
    System.out.println("Dialog||反复调用");
    if (activity == null) {
      flag = 0;
      activity = activityStack.topActivity();
      dialog = new MDialog(activity);
    }
    if (activity.getClass().equals(activityStack.topActivity().getClass())) {
      flag = 1;
    } else {
      /**
       * 切换了页面
       * dialog in OldActivity isShow?dismiss:continue
       * 置空activity
       * 递归
       */
      if (dialog.isShowing()) {
        dialog.dismiss();
      }
      dialog = null;
      activity = null;
      dialogSingleton();
    }
  }

  public void show() {
    dialogSingleton();
    switch (flag) {
      case -1:
        break;
      case 0:
        dialog.show();
        break;
      case 1://activity相同 if允许显示
        if (!dialog.isShowing() && canShow) {
          dialog.show();
        }
        break;
    }
  }

  public void dismiss() {
    if (dialog == null || !dialog.isShowing()) return;

    dialog.dismiss();
    if (handler != null) {
      canShow = false;
      handler.postDelayed(new Runnable() {
        @Override
        public void run() {
          canShow = true;
          dialog = null;
          activity = null;
        }
      }, 500);
    }
    System.out.println("Dialog||消失被调用");
  }
}

其中MDialog就是一个普通的Dialog的继承,可以看此处github

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,115评论 25 709
  • 雨天,小区处处是景。 花儿被雨水浸润,显得娇艳动人。
    luola阅读 1,535评论 0 0
  • 【上一篇】大秦帝国之称霸西戎 人才是发展的动力,是国家和民族未来发展的基石。人才凋零是国家不幸,辅佐秦穆公称霸西戎...
    最爱肉丸子先生阅读 4,101评论 0 3
  • 文字:雪人图片:来自网络 我从小在农村长大,如果在求学这条路上能走出去,那我们这些农村娃就逃离了苦海。 不再每天重...
    雾都花儿阅读 3,717评论 0 2

友情链接更多精彩内容