**如何管理多个dialog弹出?
需求背景:重复触发某一广播弹出多个dialog,现只需弹一个dialog,解决方案关键代码如下:
解决方案1:用isShowing()对正在show的dialog进行管理
if (mDialog == null)
mDialog = new BaseDialogActivity(context, markIntent,R.style.BaseDialog);
//读者需自定义dialog
if (mDialog.isShowing() && null != mDialog){
//关键是这个判断,isShowing()判断是否有同一个对象的dialog正在show。
//加上此句问题就解决了
Log.d(TAG,"--showing: "+ mDialog.isShowing());
mDialog.dismiss();
}
//dialog悬浮框,此处需读者自加权限
mDialog.getWindow().setType( WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
mDialog.show();
解决方案2:用map对正在show的dialog进行管理
Map<Object, Boolean> mapDialog=new HashMap<Object, Boolean>(); //存放正在show的dialog
mDialog = new BaseDialogActivity(context, markIntent, R.style.BaseDialog);
//这里是判断map中有没有正在show的dialog,有的话就将其关闭,然后状态置为false
Iterator<Entry<Object, Boolean>> it=mapDialog.entrySet().iterator();
while(it.hasNext()){
Entry<Object, Boolean> entry = (Entry<Object, Boolean>) it.next();
if(entry.getValue()){
((Dialog) entry.getKey()).dismiss();
mapDialog.put(((Dialog) entry.getKey()), false);
}
}
mDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
mDialog.show();
mDialog.put(dialog2, true); //show完后设为ture
此方案,可以对多个不同对象的dialog进行管理,原理都是将show的dialog放在map里面进行需求操作。
以上两种方案都能解决管理多个dialog弹出问题,代码写得比较简单,技术笔记还望各位指点
本文介绍了在Android中如何管理多个dialog弹出的问题。当重复触发广播导致多个dialog出现时,提供了两种解决方案:一是利用isShowing()方法检查dialog是否正在显示;二是使用Map存储并管理正在显示的dialog。这两种简单的方法都能有效地解决dialog管理需求。

4214

被折叠的 条评论
为什么被折叠?



