欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > 6-4.Android 对话框之进度对话框问题清单(UI 线程问题、外部取消、dismiss 方法与 hide 方法)

6-4.Android 对话框之进度对话框问题清单(UI 线程问题、外部取消、dismiss 方法与 hide 方法)

2025/2/24 13:32:50 来源:https://blog.csdn.net/weixin_52173250/article/details/143092130  浏览:    关键词:6-4.Android 对话框之进度对话框问题清单(UI 线程问题、外部取消、dismiss 方法与 hide 方法)

对话框

  1. 对话框(Dialog)是一种常用的 UI 组件,它主要用于显示信息、接收用户操作反馈

  2. 对话框可以包含各种元素,但是主要还是以文本、按钮为主,其次是列表

  3. 其中,基础对话框是 Android 中最简单的对话框,而后是进度对话框、自定义对话框等


一、UI 线程问题

1、非 UI 线程中创建对话框
  • 非 UI 线程中创建对话框会抛出异常
new Thread(() -> {try {ProgressDialog progressDialog = new ProgressDialog(this);progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);progressDialog.setTitle("加载对话框");progressDialog.setMessage("加载中~~~");progressDialog.show();} catch (Exception e) {e.printStackTrace();}
}).start();
  • 输出结果
java.lang.RuntimeException: Can't create handler inside thread Thread[Thread-2,5,main] that has not called Looper.prepare()
2、非 UI 线程中显示对话框
  • 非 UI 线程中显示对话框会抛出异常
ProgressDialog progressDialog = new ProgressDialog(this);progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setTitle("加载对话框");
progressDialog.setMessage("加载中~~~");new Thread(() -> {try {progressDialog.show();} catch (Exception e) {e.printStackTrace();}
}).start();
  • 输出结果
java.lang.RuntimeException: Can't create handler inside thread Thread[Thread-2,5,main] that has not called Looper.prepare()
3、非 UI 线程中关闭对话框
  • 非 UI 线程中关闭对话框不会抛出异常
ProgressDialog progressDialog = new ProgressDialog(this);progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setTitle("加载对话框");
progressDialog.setMessage("加载中~~~");progressDialog.show();new Thread(() -> {try {Thread.sleep(5 * 1000);progressDialog.dismiss();} catch (Exception e) {e.printStackTrace();}
}).start();

二、外部取消

1、加载对话框外部取消
  1. 通过 setCancelable(boolean cancelable) 方法设置加载对话框是否可以通过点击外部区域来取消

  2. 建议对加载对话框禁止点击外部区域来取消,因为加载对话框的取消通常应该由业务代码控制

ProgressDialog progressDialog = new ProgressDialog(this);progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setTitle("加载对话框");
progressDialog.setMessage("加载中~~~");progressDialog.setCancelable(false); // 建议使用progressDialog.show();
2、进度条对话框外部取消
  1. 通过 setCancelable(boolean cancelable) 方法设置进度条对话框是否可以通过点击外部区域来取消

  2. 建议对进度条对话框禁止点击外部区域来取消,因为加载对话框的取消通常应该由业务代码控制

ProgressDialog progressDialog = new ProgressDialog(this);progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setTitle("进度条对话框");
progressDialog.setMessage("加载中~~~");
progressDialog.setMax(100);progressDialog.setCancelable(false); // 建议使用progressDialog.show();new Thread(() -> {for (int j = 0; j <= 100; j++) {try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}progressDialog.setProgress(j);}progressDialog.dismiss();
}).start();

三、dismiss 方法与 hide 方法

1、基本介绍
  1. dismiss 方法:用于完全关闭并移除 ProgressDialog,一旦调用此方法,ProgressDialog 将不再显示在屏幕上,且相关的资源会被移除

  2. hide 方法:用于关闭 ProgressDialog,一旦调用此方法,ProgressDialog 将不再显示在屏幕上,但相关的资源不会被移除

2、演示
ProgressDialog progressDialog = new ProgressDialog(this);progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setTitle("加载对话框");
progressDialog.setMessage("加载中~~~");progressDialog.show();Handler handler = new Handler();handler.postDelayed(() -> progressDialog.hide(), 5 * 1000);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词