您的位置:首页 > 移动开发 > Android开发

【Android】使用ProgressBar遇到的问题

2016-02-24 06:14 447 查看
【关键词】

ProgressBar
自动取消


【问题】

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

发出任务的时候,post一个定时的“失败的Runnable”;

如果成功响应了,取消进度条,并且取消这个“失败的Runnable”;

如果没能成功响应,则“失败的Runnable”得到了执行,在“失败的Runnable”中取消进度条;
【原则】

开启了进度条,就一定记得关闭它;
【代码】
privateHandlermHandler=newHandler();
privateRunnablemFailedRunnable=newRunnable(){
@Override
publicvoidrun(){
dismissDialog();
ToastUtil.toastOnMain(mContext,"Tips:Failed!");
//TODO失败的逻辑
}
};
privateProgressDialogmDialog=null;
privatevoidshowDialog(Stringstr){
if(mDialog==null){
mDialog=newProgressDialog(mContext);
mDialog.setCancelable(false);
mDialog.setTitle("Tips:");
}
mDialog.setMessage(str);
if(!mDialog.isShowing()){
mDialog.show();
}
}
privatevoiddismissDialog(){
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: