溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用android dialog如何實(shí)現(xiàn)根據(jù)彈窗等級(jí)排序顯示

發(fā)布時(shí)間:2020-10-26 16:17:51 來源:億速云 閱讀:284 作者:Leah 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)使用android dialog如何實(shí)現(xiàn)根據(jù)彈窗等級(jí)排序顯示,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

背景:由于主界面可能彈窗很多彈窗,需求要求某個(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é)果展示:

使用android dialog如何實(shí)現(xiàn)根據(jù)彈窗等級(jí)排序顯示

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

DialogLevel如果感覺有用,請(qǐng)star哦

關(guān)于使用android dialog如何實(shí)現(xiàn)根據(jù)彈窗等級(jí)排序顯示就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI