中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用android dialog如何實現根據彈窗等級排序顯示

發布時間:2020-10-26 16:17:51 來源:億速云 閱讀:285 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關使用android dialog如何實現根據彈窗等級排序顯示,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

背景:由于主界面可能彈窗很多彈窗,需求要求某個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, activity));
 }
}

添加集合中要根據等級排序

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消失監聽,整理集合,判斷最上層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);
}

結果展示:

使用android dialog如何實現根據彈窗等級排序顯示

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

DialogLevel如果感覺有用,請star哦

關于使用android dialog如何實現根據彈窗等級排序顯示就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辽宁省| 兴海县| 宝坻区| 黔东| 赞皇县| 西贡区| 扎囊县| 镇平县| 鹤岗市| 伊宁市| 始兴县| 黑河市| 班戈县| 台中市| 湖州市| 固始县| 泌阳县| 新和县| 隆林| 三都| 宜川县| 建水县| 合山市| 柘城县| 庆云县| 新泰市| 姜堰市| 松原市| 噶尔县| 池州市| 威宁| 漯河市| 阳新县| 长岭县| 吉林市| 和田市| 海宁市| 和政县| 宜丰县| 永昌县| 灵璧县|