最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android dialog根據(jù)彈窗等級(jí)排序顯示的示例代碼

 更新時(shí)間:2020年10月22日 09:59:15   作者:影魔  
這篇文章主要介紹了android dialog根據(jù)彈窗等級(jí)排序顯示,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

背景:由于主界面可能彈窗很多彈窗,需求要求某個(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android中音視頻合成的幾種方案詳析

    Android中音視頻合成的幾種方案詳析

    隨著音視頻領(lǐng)域的火熱,在很多領(lǐng)域(教育,游戲,娛樂,體育,跑步,餐飲,音樂等)嘗試做音視頻功能,下面這篇文章主要給大家介紹了關(guān)于Android中音視頻合成的幾種方案的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起看看吧。
    2017-12-12
  • iOS開發(fā)中TableView類似QQ分組的折疊與展開效果

    iOS開發(fā)中TableView類似QQ分組的折疊與展開效果

    這篇文章主要介紹了iOS開發(fā)中TableView類似QQ分組的折疊與展開效果,其實(shí)要做這個(gè)效果我先想到的是在tableView中再嵌套多個(gè)tableView。下面通過本文給大家分享實(shí)現(xiàn)思路,需要的朋友可以參考下
    2016-12-12
  • Android RefreshLayout實(shí)現(xiàn)下拉刷新布局

    Android RefreshLayout實(shí)現(xiàn)下拉刷新布局

    這篇文章主要為大家詳細(xì)介紹了Android RefreshLayout實(shí)現(xiàn)下拉刷新布局,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • android中Handle類的用法實(shí)例分析

    android中Handle類的用法實(shí)例分析

    這篇文章主要介紹了android中Handle類的用法,以實(shí)例形式較為詳細(xì)的分析了基于Handle類線程執(zhí)行的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • Android 個(gè)人理財(cái)工具一:項(xiàng)目概述與啟動(dòng)界面的實(shí)現(xiàn)

    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類使用詳解

    這篇文章主要介紹了Android三種方式生成矢量圖的VectorDrawable類,2014年6月26日的I/O?2014開發(fā)者大會(huì)上谷歌正式推出了Android?L,它帶來了全新的設(shè)計(jì)語言Material?Design,新的API也提供了這個(gè)類VectorDrawable
    2023-02-02
  • Android?NDK開發(fā)之FFmpeg視頻添加水印

    Android?NDK開發(fā)之FFmpeg視頻添加水印

    這篇文章主要介紹了在Android?NDK開發(fā)中如何通過FFmpeg為視頻添加水印,文中的示例代碼講解詳細(xì),對(duì)我們了解Android開發(fā)有一定的幫助,感興趣的可以學(xué)習(xí)一下
    2021-12-12
  • Android開發(fā)簡(jiǎn)易音樂播放器

    Android開發(fā)簡(jiǎn)易音樂播放器

    這篇文章主要為大家詳細(xì)介紹了Android開發(fā)簡(jiǎn)易音樂播放器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Android Studio用genymotion運(yùn)行后小圖標(biāo)無法顯示問題

    Android Studio用genymotion運(yùn)行后小圖標(biāo)無法顯示問題

    這篇文章主要介紹了Android Studio用genymotion運(yùn)行后小圖標(biāo)無法顯示的問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Android之事件分發(fā)機(jī)制與沖突詳解

    Android之事件分發(fā)機(jī)制與沖突詳解

    這篇文章主要介紹了Android之事件分發(fā)機(jī)制與沖突詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09

最新評(píng)論

株洲县| 大邑县| 原平市| 嵩明县| 磴口县| 抚顺县| 泾阳县| 江城| 库尔勒市| 鹿邑县| 龙川县| 故城县| 肇源县| 泾阳县| 勐海县| 舒城县| 苏尼特右旗| 永安市| 岳西县| 托里县| 凤冈县| 霸州市| 河津市| 长治市| 平泉县| 武邑县| 景宁| 获嘉县| 武宁县| 铜川市| 大洼县| 德钦县| 和硕县| 永川市| 广元市| 徐闻县| 威海市| 鄂尔多斯市| 冀州市| 崇阳县| 旌德县|