Android点击button弹出ProgressDialog,响应结束后ProgressDialog消失

Android点击button弹出ProgressDialog,响应结束后ProgressDialog消失ProgressDialog与Handler结合使用,事件响应前弹出dialog,事件响应结束后dialog自动消失。

大家好,又见面了,我是你们的朋友全栈君。

  使用背景:项目中需要使用几个机器学习模型,由于加载很缓慢,所以考虑用ProgressDialog来进行提示,预测结束后dialog自动消失。
  效果如下:
在这里插入图片描述

1.声明Handler和ProgressDialog

public ProgressDialog progressDialog;
public Handler handler = null;

2.点击事件

query.setOnClickListener(v -> { 
   
    progressDialog = new ProgressDialog(AdaBoostActivity.this);
    progressDialog.setTitle("提示");
    progressDialog.setMessage("正在加载...");
    progressDialog.setIcon(R.drawable.running);
    new Thread(){ 
   
        public void run(){ 
   
            try{ 
   
                runOnUiThread(() -> createList());
                Message msg = new Message();
                msg.what = 1;
                handler.sendMessage(msg);
            }catch(Exception e){ 
   
                e.printStackTrace();
            }
        }
    }.start();//线程启动
    handler = new Handler(){ 
   
        @Override
        public void handleMessage(@NonNull Message msg) { 
   
            super.handleMessage(msg);
            progressDialog.dismiss();
            ToastUtil.showMessage(AdaBoostActivity.this, "预测完成!");
        }
    };
    progressDialog.show();
});

其中:

 runOnUiThread(() -> createList());

  createList()方法完成后ProgressDialog消失,因为createList()中涉及到渲染TextView,所以使用runOnUiThread()。
  createList完成后handler发送消息:

Message msg = new Message();
msg.what = 1;
handler.sendMessage(msg);

  然后销毁dialog:

handler = new Handler(){ 
   
    @Override
    public void handleMessage(@NonNull Message msg) { 
   
        super.handleMessage(msg);
        progressDialog.dismiss();
        ToastUtil.showMessage(AdaBoostActivity.this, "预测完成!");
    }
};

3.销毁线程

@Override
protected void onDestroy() { 
   
    super.onDestroy();
    if(handler != null) { 
   
        handler.removeCallbacksAndMessages(null);
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159092.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 《python语言程序设计》_第4章_选择[通俗易懂]

    《python语言程序设计》_第4章_选择[通俗易懂]第四章#4.1引言布尔表达式:选择语句选择的条件。程序:importmath#加载math模块radius=eval(input("Enteraninteger:&quo

    2022年7月6日
    21
  • s3c2440中断体系

    s3c2440中断体系intmain(){while(1);return0;}

    2022年5月1日
    62
  • 微型计算机原理与接口技术答案第四版_微机接口与原理技术第三版课后答案

    微型计算机原理与接口技术答案第四版_微机接口与原理技术第三版课后答案微型计算机原理与接口技术第三版答案第1章练习题1.选择题(1)BCA(2)A(3)DA(4)C2.填空(1)10,12(2)取出指令,执行指令(3)(4)内部码3.简答题(1)微处理器,微型计算机和微型计算机系统三者有何联系与区别?答:微处理器是把原来的中央处理单元CPU的复杂电路(包括运算器和控制器)做在一片或…

    2022年10月2日
    3
  • 初识AngularJS

    初识AngularJS初识AngularJS一、AngularJS是什么?AngularJS,简称:ng它是一款非常优秀的前端高级JS框架由MiskoHevery等人创建2009年被Google公司收购,用于其多款产品有一个全职的开发团队继续开发和维护这个库这个框架可以轻松构建SPA应用程序通过指令扩展HTML,通过表达式将数据绑定到HTML(基本不需要DOM操作)二、SPA应用程序简单介绍单页面应用

    2022年7月25日
    5
  • 手机JAVA编程技术[通俗易懂]

    JAVA手机编程技术林天峰(温州职业技术学院计算机系浙江

    2022年4月11日
    57
  • Java AbstractMethodError 原因分析:运行eureka客户端报错

    Java AbstractMethodError 原因分析:运行eureka客户端报错我在创建euraka客户端时报错,java.lang.AbstractMethodError:null,在网上找了大半天也没有找到靠谱的答案,探求本质,多数文章都是浮于表面,并没有对错误原因进行深入分析,后面我找到了一篇对java.lang.AbstractMethodError原理进行讲解的文章,才恍然大悟。首先java.lang.AbstractMethodError是运行时错误,编译时…

    2022年6月2日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号