新手-99 2022-08-01 00:41 采纳率: 79.3%
浏览 33
已结题

安卓dialog的loading无法自动关闭

使用安卓的dialog的loading弹窗时,.show()可以正常弹出,但是用.dismiss()不能关闭,只能手动点空白区域关闭。

我用的是第三方的loading库,名字叫 ZLoadingDialog

比如点击一个按钮发送验证码,点击按钮就调用.show(),此时可以正常弹出,然后在发送验证码之后点调用.dismiss()却不能自动关闭。也许我描述的不够明白,贴代码吧。

效果图👇

img

代码👇

  //发送邮箱验证码逻辑
        ed4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                
                //弹出loading , 让用户不会以为程序卡死了 , 缓解尴尬
                DialogLoad dialogLoad = new DialogLoad(Register.this);
                dialogLoad.dialogLoading();
                
                String Rurl = myurl;
                String Register_useremail = "useremail="+ed3.getText().toString();
                String appid = "&appid=10000";
                boolean bl = Register_useremail.contains("@");
                boolean bl1 = Register_useremail.contains(".");
                if (TextUtils.isEmpty(ed3.getText())) {
                    Toasty.warning(Register.this, "邮箱不能为空", Toasty.LENGTH_SHORT).show();
                } else if (!bl || !bl1) {
                    Toasty.warning(Register.this, "邮箱格式不正确\n注意中英文符号的输入", Toasty.LENGTH_LONG).show();
                } else {

                    ed4.setEnabled(false);//发送之后设置发送按钮为不可点击 ,60秒之后再恢复
                    
                    /*
                      * 在线程里调用网络请求的方法,来发送验证码,并且把返回值发送给主线程
                    */
                    new Thread(() -> {
                        String value = ThreadHttp.HttpDo(Rurl, "", "", Register_useremail, appid, "");
                        Message message = new Message();
                        message.what = 2;
                        message.obj = value;
                        mhandler.sendMessage(message);
                    }).start();
                    
                    dialogLoad.dismiss();// 发送给验证码的message发送到mhandler之后 就关闭loading
            }
            }
        });

如果还需要看看dismiss方法 那我也贴出来吧

 public void dismiss() {
        if (mDismissOverride != null) {
            mDismissOverride.run();
            return;
        }

run日志我也看不明白,也没有报错,但是dismiss明明就没生效啊!我也尝试过用.hint来隐藏loading弹窗,一样是没用,也尝试过把dismiss放在不同的地方,比如放在线程里面,也是没用。请求解答一下,感谢感谢!

  • 写回答

1条回答 默认 最新

  • 不会写代码的猴子 Android领域优质创作者 2022-08-01 09:26
    关注

    mDismissOverride.run();这一句是怎么引用来了?
    mDismissOverride这个对象是Dialog吗?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月9日
  • 已采纳回答 8月1日
  • 创建了问题 8月1日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程