关于V7包下AlertDialog调用Dismiss的解决方法

Dialog可以算是每个项目都能使用的基础控件之一.

最近功能开发中,因为需求问题,使用到Support-V7 下的Dialog

不熟悉如何使用或者对该控件较为陌生可以参考链接:AlertDialog 使用

项目的效果图:


(PS:本人对UI理解较差,动手绘图能力新手水平,勿喷)

大概分析了之后,决定使用V7下的AlertDialog之后,代码即将结束的时候,卡顿在对于效果图中"取消"的这个手动操作功能。

当时我的代码是这样的:

<span style="font-size:18px;"> private void _initializeDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        View view = getLayoutInflater().inflate(layoutId, null);
        /**
         * 省略..
         */
        btnCancle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              <span style="color:#ff0000;">  //一开始此处的逻辑操作是如此计划的。(此处使用try-catch表示)
              try{
                  builder.dismiss();
              }catch("No Such Method has found~"){
                  // 报错???没有这个方法?不可能吧?让我想想?
              }finally{
                    //去看源码

                }</span>
            }
        });

    }</span>



本以为一句builder.dismiss()可以了解我的心愿,却发现竟然出错.

不甘心,去查看Dialog源码:

   由于源码过多,只截图部分重要代码,如下图:

  




从源码中我们可以看到几个地方:

  • Dialog的构造方法为Protected
  • 内部类Builder是public static
  • Builder内部类中Create()方法返回的是一个new AlertDialog对象
  • Builder内部类中Show()方法只是对Create()方法返回对象控制

仔细 分析一下,Builder内部类可以抽象看成是对Dialog内容的一个构造类,包含了诸多比如:setView和setText等设置Style的方法,其实Dialog的源码理解起来比较好理解。

回归正题,如何在使用AlertDialog.Builder时候调用Dismiss()呢?

在这之前,我看了一些论坛里对于这个问题的解决办法的探讨,比如一些人说用 mBuilder(AlertDialog.Builder 实例化的对象),直接调用mBuilder.create()-->此时

 if( mBuilder.Create() instance of AlertDialog){
    ...
   }   
答案是:

  return true;

So,有人提出了 使用mBuilder.Create().dismiss()方法。

根据上面的截图,我们发现Create()方法返回的是一个new AlertDialog()对象,持有的对象发生改变了,还能控制么???


按照笔者的理解,对于V7包下的Dialog使用方式应该是:


  <span style="color:#ff0000;">      mDialog=new AlertDialog.Builder(this).create();
        /**
         * 此处不做详细操作,可以任意控制
         */
        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDialog.dismiss();
            }
        });
        
        mDialog.show();</span>














  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值