這是我的第一篇文章
作者:LiZuanxiao
微信:libi_520_com
2018年03月09日15:07:46
github更新了代碼實現(xiàn)方式 github
公司項目中大量用到了Dialog抓谴。有時,頻繁調(diào)用接口會出現(xiàn)Dialog反復(fù)彈出的情況苗膝。so衣吠,老大就交代了任務(wù):
- 避免Dialog重復(fù)彈出
- 在上一個Dialog消失500ms之間赋访,不能彈出潦闲,500ms之后挤悉,可以彈出新Dialog
就是這樣,我開始了一個Dialog工具類的開發(fā)泣刹。
上最終代碼吧
public class DialogMananger {
private MDialog dialog;
private Activity activity = null;
//最好放到全局類中初始化
private ActivityStack activityStack;
private Handler handler;
private boolean canShow = true;//500ms內(nèi)不允許重復(fù)顯示
/**
*
*/
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||反復(fù)調(diào)用");
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||消失被調(diào)用");
}
}
其中MDialog
就是一個普通的Dialog的繼承辈讶,可以看此處github