Dialog管理工具类
2017-10-10 本文已影响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