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仿新浪微博自定义ListView下拉刷新(4)

    Android仿新浪微博自定义ListView下拉刷新(4)

    这篇文章主要为大家详细介绍了Android仿新浪微博自定义ListView下拉刷新,重点介绍了Adapter的详细代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android中AlertDialog用法实例分析

    Android中AlertDialog用法实例分析

    这篇文章主要介绍了Android中AlertDialog用法,结合实例形式简单分析了AlertDialog的基本调用与功能实现技巧,需要的朋友可以参考下
    2016-01-01
  • Android如何获取屏幕、状态栏及标题栏的高度详解

    Android如何获取屏幕、状态栏及标题栏的高度详解

    在日常开发中,经常会遇到获取屏幕高度、状态栏高度等需求,所以下面这篇文章就给大家总结介绍了关于Android如何获取屏幕、状态栏及标题栏高度的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们可以参考下。
    2017-10-10
  • Android Listview点赞问题关于图片重复问题

    Android Listview点赞问题关于图片重复问题

    最近在开发android方面的项目时,遇到很多问题,下面小编以listview 与 baseadapter结合使用为例,给大家分享下关于点赞的的时候 图片重复问题的解决方法,一起看看吧
    2016-11-11
  • Android数字选择器NumberPicker使用详解

    Android数字选择器NumberPicker使用详解

    这篇文章主要为大家详细介绍了Android数字选择器NumberPicker的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Android 中ActionBar+fragment实现页面导航的实例

    Android 中ActionBar+fragment实现页面导航的实例

    这篇文章主要介绍了Android 中ActionBar+fragment实现页面导航的实例的相关资料,希望通过本文能帮助到大家实现这样的功能,需要的朋友可以参考下
    2017-09-09
  • Android实现微信登录的示例代码

    Android实现微信登录的示例代码

    微信登录的实现与qq登录类似。本文主要介绍了Android实现微信登录,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • android FragmentTabhost实现导航分页

    android FragmentTabhost实现导航分页

    这篇文章主要为大家详细介绍了android FragmentTabhost实现导航分页,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Android 多用户详情

    Android 多用户详情

    这篇文章主要以Linux 用户和组详细的介绍了Android 多用户的内容,感兴趣的小伙伴可以参考下文,希望文章能get到你的点
    2021-08-08
  • Flutter的键值存储数据库使用示例详解

    Flutter的键值存储数据库使用示例详解

    这篇文章主要为大家介绍了Flutter的键值存储数据库使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08

最新评论