【Android】使用ProgressBar遇到的问题

【关键词】

ProgressBar 自动取消


【问题】

给dialog设置了不可取消的属性,如果请求没能得到相应,进度条却无法关闭,程序相当于崩溃,这很影响用户体验;

【解决办法】

发出任务的时候,post一个定时的“失败的Runnable”;
如果成功响应了,取消进度条,并且取消这个“失败的Runnable”;
如果没能成功响应,则“失败的Runnable”得到了执行,在“失败的Runnable”中取消进度条;

【原则】

开启了进度条,就一定记得关闭它;

【代码】
 
 
private Handler mHandler = new Handler();
 
private Runnable mFailedRunnable = new Runnable() {
 
@Override
public void run() {
dismissDialog();
ToastUtil.toastOnMain(mContext, "Tips: Failed!");
// TODO 失败的逻辑
}
};
 
private ProgressDialog mDialog = null;
private void showDialog(String str) {
if (mDialog == null) {
mDialog = new ProgressDialog(mContext);
mDialog.setCancelable(false);
mDialog.setTitle("Tips:");
}
mDialog.setMessage(str);
if (!mDialog.isShowing()) {
mDialog.show();
}
}
 
private void dismissDialog() {
if (mDialog != null && mDialog.isShowing())
mDialog.dismiss();
}

发出请求的时候,显示进度条:

 
 
showDialog("开始XXX...");
// TODO 发出请求的逻辑;
mHandler.postDelayed(mFailedRunnable, 5000);

结果1:在请求得到相应的时候,关闭进度条,取消失败的Runnable:

 
 
dismissDialog();
mHandler.removeCallbacks(mFailedRunnable);
// TODO 响应成功后的操作;

结果2:如果请求没有得到响应,则会执行 mFailedRunnable:
mFailedRunnable 中会取消进度条的显示;


扩展:
如果请求是连续的(例如:连接蓝牙有这几个过程:正在找设备 --> 找到了设备 --> 正在连接设备 --> 连接成功 --> 正在配对设备 --> 配对成功后的其他请求),则只改变进度条提示文字而不需要关闭进度条:

 
 
mHandler.removeCallbacks(mFailedRunnable); // 上一个设备得到响应了,则取消“失败的Runnable”
showDialog("开始另一个XXX...");
//TODO 发出请求的逻辑
mHandler.postDelayed(mFailedRunnable, 5000);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值