如何管理多个dialog弹出

来源:互联网 发布:抗战网络电影 编辑:程序博客网 时间:2024/06/07 20:41

**如何管理多个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弹出问题,代码写得比较简单,技术笔记还望各位指点

0 0
原创粉丝点击