有时候页面之间的跳转需要用一个ProgressDialog进度弹出框去提示用户等待,好让后台服务有足够的时间获取信息,这样子跳转到另外一个页面的之前就可以将后台服务获取的信息加载在页面上。想法上是挺好的,我最初的做法是在showdialog中使用进度提示框,部分代码如下:
case DIALOG2:
mpDialog = new ProgressDialog(this);
mpDialog.setTitle("进度条"); //设置标题
mpDialog.setMessage("正在处理请稍后..."); //设置body信息
mpDialog.setMax(100); //进度条最大值是100
mpDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); //设置进度条样式是横向的
return mpDialog;
然后再button点击按钮监听事件里面加上下面的代码:
showDialog(DIALOG2);
progressValue = 0;
mpDialog.setProgress(0);
progressHandler.sendEmptyMessage(0);
Intent test=new Intent(WorkMainMenu.this,Test.class);
startActivity(test);
测试发现,点击了按钮之后,不会出现showDialog对话框,而是直接跳转进了页面。
后来认真查阅资料发现,activity是一个UI线程,运行于主线程中,android系统在启动的时候会为该activity创建一个消息队列和消息循环(Looper),handler的作用是把消息加入特定的的(Looper)中,并分发和处理消息队列中的消息。那么如何把一个线程加入到主线程的消息队列?那只有使用handler对象。
于是添加了并修改了代码:
case DIALOG2:
mpDialog = new ProgressDialog(this);
mpDialog.setTitle("进度条"); //设置标题
mpDialog.setMessage("正在处理请稍后..."); //设置body信息
mpDialog.setMax(100); //进度条最大值是100
mpDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); //设置进度条样式是横向的
return mpDialog;
progressHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
if(progressValue == 100){
Intent
test=new Intent(WorkMainMenu.this,Test.class);
startActivity(test);
mpDialog.dismiss(); }
else{
//设置进度条的值加1
progressValue ++;
mpDialog.incrementProgressBy(1);
//如果进度条还没结束则100ms后进度条加1,循环调用每100ms就将进度条加1
progressHandler.sendEmptyMessageDelayed(0, 100);
}
};
按钮监听事件里面加上如下代码就行了:
showDialog(DIALOG2);
progressValue = 0;
mpDialog.setProgress(0);
progressHandler.sendEmptyMessage(0);
至此,两个Activity跳转之间使用ProgressDialog出现的问题就解决了,读者可以自行去网上仔细搜索UI线程、Looper、Handler的知识点。
有问题的话可以留言,大家一起共同探讨