如何管理多个dialog弹出

**如何管理多个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
             IteratorObject, 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)