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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • arpspoof怎么安装_添加静态arp的命令

    arpspoof怎么安装_添加静态arp的命令安装参考https安装测试安装是否成功arpspoofVersion2.4Usage。

    2022年10月6日
    5
  • java中高级面试题总结(全面)_java面试题大全

    java中高级面试题总结(全面)_java面试题大全jvm结构原理,GC工作原理Jvm结构:Jvm主要包括四个部分:1、类加载器(ClassLoad)在JVM启动时或者在类运行时将需要的class加载到JVM中。类加载时间与过程:类从被加载到虚拟机内存开始,在到卸载出内存为止,正式生命周期包括了:加载,验证,准备,解析,初始化,使用和卸载7个阶段。其中验证、准备、解析这个三个步…

    2022年8月20日
    8
  • C语言 getchar()原理及易错点解析

    C语言 getchar()原理及易错点解析文章目录一.getchar()系列1.getchar()工作原理及作用2.使用getchar()清理回车\n3.使用getchar()清理缓存一.getchar()系列1.getchar()工作原理及作用工作原理:getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了,第一次getchar()时,…

    2022年10月19日
    4
  • java实现四种常用排序算法

    java实现四种常用排序算法四种常用排序算法冒泡排序特点:效率低,实现简单思想(从小到大排):每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有元素。这只是冒泡排序的一种,当然也可以从后往前排。publicvoidbubbleSort(intarray[]){intt=0;for(inti=0;i<…

    2022年7月25日
    10
  • 多线程中 ManualResetEvent 的用法[通俗易懂]

    多线程中 ManualResetEvent 的用法[通俗易懂]///<summary>///手动重启///</summary>privateManualResetEventmanualReset=newManualR

    2022年7月1日
    28
  • java数组排序去重_JAVA数组去重排序

    java数组排序去重_JAVA数组去重排序今天也是很丧的一天,天气真的好热啊,胃不舒服,一直打嗝,中午吃了一碗凉掉的粥,然后开始拉肚子,一点不想要过来医院学习(基本上都是自己傻坐着,又没有老师来教我们,幽怨.jpg),但不来又过不去自己心里的那道坎,像是逃课的感觉,就很烦,然后在校门口纠结了十分钟还是过来了,emmmmm……然后就有了下面的代码packageArray;publicclassBubbleSort{publi…

    2022年6月29日
    22

发表回复

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

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