美文网首页
Dialog管理工具类

Dialog管理工具类

作者: 李钻小 | 来源:发表于2017-10-10 16:37 被阅读0次

这是我的第一篇文章
作者: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

相关文章

网友评论

      本文标题:Dialog管理工具类

      本文链接:https://www.haomeiwen.com/subject/zgtbyxtx.html