android dialog根据弹窗等级排序显示的示例代码

 更新时间:2020年10月22日 09:59:15   作者:影魔  
这篇文章主要介绍了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);
}

结果展示:

这里只是单个activity中添加排列显示dialog的部分重要代码,要想要全部代码,下面github

DialogLevel如果感觉有用,请star哦

到此这篇关于android dialog根据弹窗等级排序显示的文章就介绍到这了,更多相关android dialog弹窗等级排序显示内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android中音视频合成的几种方案详析

    Android中音视频合成的几种方案详析

    随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频功能,下面这篇文章主要给大家介绍了关于Android中音视频合成的几种方案的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起看看吧。
    2017-12-12
  • iOS开发中TableView类似QQ分组的折叠与展开效果

    iOS开发中TableView类似QQ分组的折叠与展开效果

    这篇文章主要介绍了iOS开发中TableView类似QQ分组的折叠与展开效果,其实要做这个效果我先想到的是在tableView中再嵌套多个tableView。下面通过本文给大家分享实现思路,需要的朋友可以参考下
    2016-12-12
  • Android RefreshLayout实现下拉刷新布局

    Android RefreshLayout实现下拉刷新布局

    这篇文章主要为大家详细介绍了Android RefreshLayout实现下拉刷新布局,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • android中Handle类的用法实例分析

    android中Handle类的用法实例分析

    这篇文章主要介绍了android中Handle类的用法,以实例形式较为详细的分析了基于Handle类线程执行的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • Android 个人理财工具一:项目概述与启动界面的实现

    Android 个人理财工具一:项目概述与启动界面的实现

    本文主要介绍Android 开发个人理财工具项目概述与启动界面的实现,这里主要对实现项目的流程做了详细概述,并对启动界面简单实现,有需要的小伙伴可以参考下
    2016-08-08
  • Android三种方式生成矢量图之VectorDrawable类使用详解

    Android三种方式生成矢量图之VectorDrawable类使用详解

    这篇文章主要介绍了Android三种方式生成矢量图的VectorDrawable类,2014年6月26日的I/O 2014开发者大会上谷歌正式推出了Android L,它带来了全新的设计语言Material Design,新的API也提供了这个类VectorDrawable
    2023-02-02
  • Android NDK开发之FFmpeg视频添加水印

    Android NDK开发之FFmpeg视频添加水印

    这篇文章主要介绍了在Android NDK开发中如何通过FFmpeg为视频添加水印,文中的示例代码讲解详细,对我们了解Android开发有一定的帮助,感兴趣的可以学习一下
    2021-12-12
  • Android开发简易音乐播放器

    Android开发简易音乐播放器

    这篇文章主要为大家详细介绍了Android开发简易音乐播放器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • Android Studio用genymotion运行后小图标无法显示问题

    Android Studio用genymotion运行后小图标无法显示问题

    这篇文章主要介绍了Android Studio用genymotion运行后小图标无法显示的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Android之事件分发机制与冲突详解

    Android之事件分发机制与冲突详解

    这篇文章主要介绍了Android之事件分发机制与冲突详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09

最新评论