android dialog根据弹窗等级排序显示的示例代码
背景:由于主界面可能弹窗很多弹窗,需求要求某个dialog必须在前面显示,如果再消失监听中,线性判断,每个dialog都去判断工作量巨大,且不易阅读。所以做了一个弹窗排序的项目。这里只是讲解单个activity中的弹窗排序,demo中还有维护多个activity 弹窗排序,详细看最下面github 做到工具组件化,不侵入原项目代码,无需继承,使用方便。 原理:当有一个dialog添加显示时,判断等级是否大于,大于则显示,否则则添加到等待队列 private void show(int level, Dialog dialog, DialogInterface.OnDismissListene 在Android开发中,有时我们需要处理多个对话框(Dialog)同时出现的情况,特别是在主界面上,可能会有各种各样的弹窗需要展示。此时,一个常见的需求是确保特定的Dialog优先显示在其他Dialog之前,以满足用户体验或者业务逻辑的要求。本文将探讨如何实现这样一个基于等级排序的Dialog显示机制。 我们可以从提供的代码片段中看到,这个实现的核心在于维护两个列表:`showList`和`waitList`。`showList`用于存储当前正在显示的Dialog,而`waitList`则存放那些因为等级不够而需要等待的Dialog。当一个新的Dialog需要显示时,会通过`show()`方法进行处理。 在`show()`方法中,首先检查传入的Dialog是否为空,然后获取当前显示的最高级别的Dialog(如果存在的话)。接着,创建一个`DialogLevelModel`对象,它包含了Dialog的等级、Dialog实例以及Activity引用。如果新Dialog的等级大于或等于当前最高级别的Dialog,那么立即显示;否则,将新Dialog添加到`waitList`,并按照等级进行排序。 排序是通过`sortAdd()`方法完成的,它遍历`waitList`,找到合适的位置将新Dialog插入,确保列表始终按等级升序排列。这里采用了倒序遍历,可以更高效地找到插入位置,避免了从头到尾遍历整个列表。 当Dialog被关闭时,`onDismiss()`回调会被触发,此时会从`showList`中移除该Dialog,并检查`waitList`中是否有等待显示的Dialog。如果有,且其等级大于或等于当前最高级别的Dialog,那么就调用`realShow()`方法显示下一个Dialog。 `realShow()`方法负责更新列表,并检查Activity状态,确保只有在Activity存活时才真正显示Dialog。如果Activity已经销毁,会调用`destory()`清理资源。 为了方便使用,这个解决方案被设计为一个工具组件,无需继承特定类,也不侵入原项目的代码结构。通过GitHub链接,可以获取到完整的实现和示例,适用于管理单个Activity乃至多个Activity的Dialog排序。 总结来说,这个示例提供了一种高效且灵活的Android Dialog排序机制,能够根据Dialog的等级自动决定显示顺序,简化了多Dialog场景下的管理复杂度。开发者可以根据这个示例,结合自己的项目需求,进行适当的调整和扩展,以实现更加复杂的Dialog管理功能。
- 粉丝: 6
- 资源: 947
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助