24. android dialog ——ProgressDialog 进度条对话框详解

首先在onCreateDialog方法里创建一个ProgressDialog,如下:

 

接下来就是进度条的进度更新,因为对话框对象一直被当前Dialog保存着,所以onCreateDialog在下次调用对话框时不会在被调,所以

进度条更新操作不能在onCreateDialog里面,而是在onPrepareDialog里面进行。

首先要将进度条置为0

increamentProgressBy源码中是调用了ProgressBar的setProgress(mProgress + diff); mProgress是当前进度值,这里的diff就是-progressDialog.getProgress(),最后结果为0,所以也可以这么用,效果和调用incrementProgressBy一样的,如下:

值得一提的是,不能直接只用setProgress(0)来设置,这样的话,第一次弹出对话框效果可以和上面的一样,但是之后再弹出对话框的进度一直都是100。为什么这里不能直接用setProgress(0),查看源码可以知道,

mHasStarted第一次调用的时候是true,当进度条达到100%时会调用onStop方法(此方法为protected,无法直接调用),将mHasStarted设置为false,也就是无法setProgress(value)了,只能通过onStart来将mHasStarted设置为true。

 

当点击“显示进度条对话框”按钮,这时候需要很耗时然后才显示对话框,而往往都会导致假死,如果超过5秒未响应将强制关闭,所以这里需要添加个多线程来做进一步处理。而进度条的增加效果是很快的,所以这这里需要让大家看到效果,得停几毫秒后再继续。

为了使主线程不受影响(处理当前Activity的线程),在点击按钮且耗时操作完后需要发送消息给主线程,主线程再做相应处理。线程之间的消息传递和异步处理是通过Handler来做处理的,相关代码如下:

 

Handler的处理如下:(Handler具体说明网上很多,可以参考此处 http://my.unix-center.net/~Simon_fu/?p=652

 

解释就到这里,先看个效果图:

 

 

实现步骤:

第一步,一个按钮用来点击后弹出对话框的

res/layout/progress_dialog_layout.xml

 

第二步,

src/com/dialog/activity/ProgressDialogActivity.java

 

 

 

 源码下载地址:http://download.csdn.net/source/3244868

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,以下是使用Android对话框技术创建不同类型对话框的示例代码: ## 普通对话框 ```java AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("普通对话框"); builder.setMessage("这是一个普通对话框示例"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 点击确定按钮后的操作 } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 点击取消按钮后的操作 } }); AlertDialog dialog = builder.create(); dialog.show(); ``` ## 单选对话框 ```java final String[] items = {"选项1", "选项2", "选项3", "选项4"}; int checkedItem = 0; // 默认选中第一个 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("单选对话框"); builder.setSingleChoiceItems(items, checkedItem, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 点击选项后的操作 } }); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 点击确定按钮后的操作 } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 点击取消按钮后的操作 } }); AlertDialog dialog = builder.create(); dialog.show(); ``` ## 多选对话框 ```java final String[] items = {"选项1", "选项2", "选项3", "选项4"}; boolean[] checkedItems = {false, false, false, false}; // 默认全部未选中 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("多选对话框"); builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { // 点击选项后的操作 } }); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 点击确定按钮后的操作 } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 点击取消按钮后的操作 } }); AlertDialog dialog = builder.create(); dialog.show(); ``` ## 进度条对话框 ```java ProgressDialog progressDialog = new ProgressDialog(this); progressDialog.setTitle("进度条对话框"); progressDialog.setMessage("正在加载,请稍后..."); progressDialog.setCancelable(false); // 设置不可取消 progressDialog.show(); ``` ## 消息对话框 ```java Toast.makeText(this, "这是一个消息对话框示例", Toast.LENGTH_SHORT).show(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值