android dialog根據(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í),判斷等級是否大于,大于則顯示,否則則添加到等待隊(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ù)等級排序
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等級對比
@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
到此這篇關(guān)于android dialog根據(jù)彈窗等級排序顯示的文章就介紹到這了,更多相關(guān)android dialog彈窗等級排序顯示內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android自定義Dialog原理實(shí)例解析
- Android 自定義加載動(dòng)畫Dialog彈窗效果的示例代碼
- android BottomSheetDialog新控件解析實(shí)現(xiàn)知乎評論列表效果(實(shí)例代碼)
- Android 之BottomsheetDialogFragment仿抖音評論底部彈出對話框效果(實(shí)例代碼)
- Android ProgressDialog用法之實(shí)現(xiàn)app上傳文件進(jìn)度條轉(zhuǎn)圈效果
- Android自定義底部彈出框ButtomDialog
- Android中AlertDialog四種對話框的最科學(xué)編寫用法(實(shí)例代碼)
- 詳解Android 8.1.0 Service 中 彈出 Dialog的方法
- Android 彈出Dialog時(shí)隱藏狀態(tài)欄和底部導(dǎo)航欄的方法
- Android彈出DatePickerDialog并獲取值的方法
- Android開發(fā)之DatePickerDialog、TimePickerDialog時(shí)間日期對話框用法示例
- Android修改Dialog樣式的方法
相關(guān)文章
Android仿新浪微博自定義ListView下拉刷新(4)
這篇文章主要為大家詳細(xì)介紹了Android仿新浪微博自定義ListView下拉刷新,重點(diǎn)介紹了Adapter的詳細(xì)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Android中AlertDialog用法實(shí)例分析
這篇文章主要介紹了Android中AlertDialog用法,結(jié)合實(shí)例形式簡單分析了AlertDialog的基本調(diào)用與功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-01-01Android如何獲取屏幕、狀態(tài)欄及標(biāo)題欄的高度詳解
在日常開發(fā)中,經(jīng)常會遇到獲取屏幕高度、狀態(tài)欄高度等需求,所以下面這篇文章就給大家總結(jié)介紹了關(guān)于Android如何獲取屏幕、狀態(tài)欄及標(biāo)題欄高度的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們可以參考下。2017-10-10Android Listview點(diǎn)贊問題關(guān)于圖片重復(fù)問題
最近在開發(fā)android方面的項(xiàng)目時(shí),遇到很多問題,下面小編以listview 與 baseadapter結(jié)合使用為例,給大家分享下關(guān)于點(diǎn)贊的的時(shí)候 圖片重復(fù)問題的解決方法,一起看看吧2016-11-11Android數(shù)字選擇器NumberPicker使用詳解
這篇文章主要為大家詳細(xì)介紹了Android數(shù)字選擇器NumberPicker的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08Android 中ActionBar+fragment實(shí)現(xiàn)頁面導(dǎo)航的實(shí)例
這篇文章主要介紹了Android 中ActionBar+fragment實(shí)現(xiàn)頁面導(dǎo)航的實(shí)例的相關(guān)資料,希望通過本文能幫助到大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-09-09android FragmentTabhost實(shí)現(xiàn)導(dǎo)航分頁
這篇文章主要為大家詳細(xì)介紹了android FragmentTabhost實(shí)現(xiàn)導(dǎo)航分頁,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08Flutter的鍵值存儲數(shù)據(jù)庫使用示例詳解
這篇文章主要為大家介紹了Flutter的鍵值存儲數(shù)據(jù)庫使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08