因为考虑到有些程序加载时间相对较长,所以在启动主界面之前,实现一个加载的progressDialog对话框来延缓,相对来说可以提高用户体验度。如果是直接进入主界面,即activity,界面因为加载时间长,一片漆黑,让用户老觉得这程序不行。
ProgressDialog 继承自AlertDialog,AlertDialog继承自Dialog,实现DialogInterface接口。
ProgressDialog的圆条形进度条创建方式有两种,一种是new Dialog ,一种是调用Dialog的静态方法Dialog.show()。
ProgressDialog的水平进度条创建方式只有一种new Dialog ,
// 方式一:new Dialog
ProgressDialog dialog = new ProgressDialog(this); dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);// 设置圆形转动的进度条,默认就是这个 dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 设置水平进度条 dialog.show();
// 方式二:使用静态方式Dialog.show()
ProgressDialog dialog =progressDialog.show(context, title, message, indeterminate, cancelable, cancelListener)
Context 是上下文,title 是题目,message是显示的信息,这三个必须有
boolean indeterminate设置是否是不明确的状态
boolean cancelable 设置是否进度条是可以取消的
DialogInterface.OnCancelListener cancelListener用于监听进度条被取消
cancelListener需要一个cancelListener
private OnCancelListener cancelListener = new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "进度条被取消", Toast.LENGTH_LONG) .show(); } };
dialog.cancel和dialog.dismiss方法本质都是一样的,都是从屏幕中删除Dialog,唯一的区别是:调用cancel方法会回调DialogInterface.OnCancelListener如果注册的话,dismiss方法不会回掉。
实现流程
Step One 弹出进度条对话框
Step Two 执行线程,在线程中实现数据的异步加载
Step Three 在线程数据加载完成后,调用Handler并集合数据,更新界面
例子:
package com.lgx.demo; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.Button; import android.widget.TextView; public class ProgDialog extends Activity { private TextView statusTextView; private Button beginBtn; private ProgressDialog progressDialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); statusTextView = (TextView)findViewById(R.id.status); beginBtn = (Button)findViewById(R.id.beginBtn); setListener(); } /** * 用Handler来更新UI */ private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { //关闭ProgressDialog progressDialog.dismiss(); //更新UI statusTextView.setText("Completed!"); }}; /** * 点击按钮事件listener */ private void setListener(){ beginBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //显示ProgressDialog progressDialog = ProgressDialog.show(ProgDialog.this, "Loading...", "Please wait...", true, false); //新建线程 new Thread(){ @Override public void run() { //需要花时间计算的方法 Calculation.calculate(4); //向handler发消息 handler.sendEmptyMessage(0); }}.start(); } }); } public static class Calculation { public static void calculate(int sleepSeconds){ try { Thread.sleep(sleepSeconds * 1000); } catch (Exception e) { // TODO: handle exception } } } }