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

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

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

背景:由于主界面可能彈窗很多彈窗,需求要求某個dialog必須在前面顯示,如果再消失監(jiān)聽中,線性判斷,每個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, 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;
}

顯示的時候,判斷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 和等待隊列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;
  }
 }
}

調用:

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);
}

結果展示:

這里只是單個activity中添加排列顯示dialog的部分重要代碼,要想要全部代碼,下面github

DialogLevel如果感覺有用,請star哦

到此這篇關于android dialog根據(jù)彈窗等級排序顯示的文章就介紹到這了,更多相關android dialog彈窗等級排序顯示內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

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

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

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

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

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

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

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

    android中Handle類的用法實例分析

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

    Android 個人理財工具一:項目概述與啟動界面的實現(xiàn)

    本文主要介紹Android 開發(fā)個人理財工具項目概述與啟動界面的實現(xiàn),這里主要對實現(xiàn)項目的流程做了詳細概述,并對啟動界面簡單實現(xiàn),有需要的小伙伴可以參考下
    2016-08-08
  • Android三種方式生成矢量圖之VectorDrawable類使用詳解

    Android三種方式生成矢量圖之VectorDrawable類使用詳解

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

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

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

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

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

    Android Studio用genymotion運行后小圖標無法顯示問題

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

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

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

最新評論

彰化市| 咸宁市| 五台县| 石门县| 乌拉特前旗| 台安县| 汾阳市| 麟游县| 永胜县| 平乐县| 辉南县| 芦山县| 茂名市| 泸水县| 梁平县| 海林市| 静宁县| 益阳市| 吐鲁番市| 青田县| 临泽县| 沭阳县| 双辽市| 永城市| 简阳市| 江城| 大足县| 陇西县| 廊坊市| 泸溪县| 晋宁县| 亳州市| 红安县| 德兴市| 婺源县| 韶山市| 长汀县| 望奎县| 那曲县| 梁平县| 正蓝旗|