主要知识点有
1.ProgressDialog.show(this, "数据加载", "正在加载中....");显示圆形进度条,但是显示后会一直是这个界面所以要让它过一会就消失
2.不能直接使用dismiss()这样这个进度框就不会显示,因此采用线程的方式
3.让他休息一会是要加载的数据
4.当回调方法都执行完才会显示对话框,而所有回调方法是在主线程中执行,所以得在分线程中设计消失
5.不能再分线程更新UI因此不能在分线程中设置Toast那为什么可以设置对话框小时呢?我们观看dismiss源码会发现dismiss是在主线程操作的,因此这属于间接操作
如图所示:
当点击按钮后会出现如图所示界面,过几秒后又回到初始界面,并提示加载完成
xml中的简单代码
<Button
android:id="@+id/btn_Progress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="显示圆形进度ProgressDialog"
android:layout_marginTop="30dp"
android:onClick="showBP"/>
在主类中主要用到线程的知识点
//圆形进度条
public void showBP (View view) {//回调方法:主线程执行
final ProgressDialog dialog = ProgressDialog.show(this, "数据加载", "正在加载中....");
//模拟做一个长时间的工作
//长时间的工作不能再主线程做,得启动分线程完成
new Thread() {
public void run() {//分线程
for(int i=0;i<20;i++) {
//休息一会
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//移除dialog
dialog.dismiss();//方法在分线程执行,但内部使用Handler实现主线程移除dialog
//不能在分线程直接更新UI
//显示toast
runOnUiThread(new Runnable() {
@Override
public void run() {//在主线程执行
Toast.makeText(DiologActivity.this,"加载完后了",0).show();
}
});
//runOnUiThread()在分线程执行
/*new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
}).start();*/
};
}.start();
}