android dialog根據(jù)彈窗等級(jí)排序顯示的示例代碼
背景:由于主界面可能彈窗很多彈窗,需求要求某個(gè)dialog必須在前面顯示,如果再消失監(jiān)聽中,線性判斷,每個(gè)dialog都去判斷工作量巨大,且不易閱讀。所以做了一個(gè)彈窗排序的項(xiàng)目。這里只是講解單個(gè)activity中的彈窗排序,demo中還有維護(hù)多個(gè)activity 彈窗排序,詳細(xì)看最下面github
做到工具組件化,不侵入原項(xiàng)目代碼,無需繼承,使用方便。
原理:當(dāng)有一個(gè)dialog添加顯示時(shí),判斷等級(jí)是否大于,大于則顯示,否則則添加到等待隊(duì)列
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, activity));
}
}
添加集合中要根據(jù)等級(jí)排序
public boolean sortAdd(DialogLevelModel inModel){
Log.e("DLArrayList","add---"+inModel.level);
int lastSize = size();
if(lastSize == 0){
return super.add(inModel);
}
int index = 0;
for (int i = size()-1; i >=0; i--){
DialogLevelModel temp = get(i);
if(inModel.level >= temp.level){
index = i+1;
break;
}
}
super.add(index,inModel);
return true;
}
顯示的時(shí)候,判斷activity是否存在,整理集合
private void realShow(DialogLevelModel dialogLevelModel){
waitList.remove(dialogLevelModel);
showList.add(dialogLevelModel);
if(dialogLevelModel.activity != null && dialogLevelModel.activity.get() != null && !dialogLevelModel.activity.get().isFinishing()){
dialogLevelModel.dialog.show();
}else{
destory();
}
}
收到dialog消失監(jiān)聽,整理集合,判斷最上層dialog 和等待隊(duì)列dialog等級(jí)對(duì)比
@Override
public void onDismiss(DialogLevelModel dialogLevelModel) {
for(int i = showList.size()-1;i>=0;i--){
if(showList.get(i).dialog == dialogLevelModel.dialog){
showList.remove(i);
break;
}
}
boolean flag =true;
while (flag) {
if(waitList.size() == 0){
break;
}
DialogLevelModel tempModel = waitList.get(waitList.size() -1);
if (getTopShowingDialog() == null) {
realShow(tempModel);
} else if (tempModel.level >= getTopShowingDialog().level) {
realShow(tempModel);
} else {
break;
}
}
}
調(diào)用:
for(int i = 0;i<15;i++){
final int level2 = (int)(1+Math.random()*1000);
final Dialog dialog2 = showCommonDialog("content:level-"+level2);
Log.e("dialoglevl","level:"+level2);
if(i ==13){
dialogLevelManager.showDelay(level2,2000,dialog2,MainActivity.this);
continue;
}
if(i ==14){
dialogLevelManager.showDelay(level2,3000,dialog2,MainActivity.this);
continue;
}
dialogLevelManager.show(level2,dialog2,MainActivity.this);
}
結(jié)果展示:

這里只是單個(gè)activity中添加排列顯示dialog的部分重要代碼,要想要全部代碼,下面github
DialogLevel如果感覺有用,請(qǐng)star哦
到此這篇關(guān)于android dialog根據(jù)彈窗等級(jí)排序顯示的文章就介紹到這了,更多相關(guān)android dialog彈窗等級(jí)排序顯示內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android自定義Dialog原理實(shí)例解析
- Android 自定義加載動(dòng)畫Dialog彈窗效果的示例代碼
- android BottomSheetDialog新控件解析實(shí)現(xiàn)知乎評(píng)論列表效果(實(shí)例代碼)
- Android 之BottomsheetDialogFragment仿抖音評(píng)論底部彈出對(duì)話框效果(實(shí)例代碼)
- Android ProgressDialog用法之實(shí)現(xiàn)app上傳文件進(jìn)度條轉(zhuǎn)圈效果
- Android自定義底部彈出框ButtomDialog
- Android中AlertDialog四種對(duì)話框的最科學(xué)編寫用法(實(shí)例代碼)
- 詳解Android 8.1.0 Service 中 彈出 Dialog的方法
- Android 彈出Dialog時(shí)隱藏狀態(tài)欄和底部導(dǎo)航欄的方法
- Android彈出DatePickerDialog并獲取值的方法
- Android開發(fā)之DatePickerDialog、TimePickerDialog時(shí)間日期對(duì)話框用法示例
- Android修改Dialog樣式的方法
相關(guān)文章
iOS開發(fā)中TableView類似QQ分組的折疊與展開效果
這篇文章主要介紹了iOS開發(fā)中TableView類似QQ分組的折疊與展開效果,其實(shí)要做這個(gè)效果我先想到的是在tableView中再嵌套多個(gè)tableView。下面通過本文給大家分享實(shí)現(xiàn)思路,需要的朋友可以參考下2016-12-12
Android RefreshLayout實(shí)現(xiàn)下拉刷新布局
這篇文章主要為大家詳細(xì)介紹了Android RefreshLayout實(shí)現(xiàn)下拉刷新布局,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
Android 個(gè)人理財(cái)工具一:項(xiàng)目概述與啟動(dòng)界面的實(shí)現(xiàn)
本文主要介紹Android 開發(fā)個(gè)人理財(cái)工具項(xiàng)目概述與啟動(dòng)界面的實(shí)現(xiàn),這里主要對(duì)實(shí)現(xiàn)項(xiàng)目的流程做了詳細(xì)概述,并對(duì)啟動(dòng)界面簡(jiǎn)單實(shí)現(xiàn),有需要的小伙伴可以參考下2016-08-08
Android三種方式生成矢量圖之VectorDrawable類使用詳解
這篇文章主要介紹了Android三種方式生成矢量圖的VectorDrawable類,2014年6月26日的I/O?2014開發(fā)者大會(huì)上谷歌正式推出了Android?L,它帶來了全新的設(shè)計(jì)語言Material?Design,新的API也提供了這個(gè)類VectorDrawable2023-02-02
Android?NDK開發(fā)之FFmpeg視頻添加水印
這篇文章主要介紹了在Android?NDK開發(fā)中如何通過FFmpeg為視頻添加水印,文中的示例代碼講解詳細(xì),對(duì)我們了解Android開發(fā)有一定的幫助,感興趣的可以學(xué)習(xí)一下2021-12-12
Android Studio用genymotion運(yùn)行后小圖標(biāo)無法顯示問題
這篇文章主要介紹了Android Studio用genymotion運(yùn)行后小圖標(biāo)無法顯示的問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04

