背景:由于主界面可能弹窗很多弹窗,需求要求某个dialog必须在前面显示,如果再消失监听中,线性判断,每个dialog都去判断工作量巨大,且不易阅读。所以做了一个弹窗排序的项目。这里只是讲解单个activity中的弹窗排序,demo中还有维护多个activity 弹窗排序,详细看最下面github
做到工具组件化,不侵入原项目代码,无需继承,使用方便。
原理:当有一个dialog添加显示时,判断等级是否大于,大于则显示,否则则添加到等待队列
private void show(int level, Dialog dialog, DialogInterface.OnDismissListener onDismissListener){
if(dialog == null){
return;
}
DialogLevelModel topDialog = getTopShowingDialog();
DialogLevelModel inModel = new DialogLevelModel(level, dialog, activity);
new DismissListenerBinder(inModel,this,onDismissListener).bind();
if(topDialog ==null || level >= topDialog.level){
realShow(inModel);
}else {
waitList.sortAdd(new DialogLevelModel(level, dialog, activit