1 /** 2 * Description: 3 * site: crazyit.org 4 * Copyright (C), 2001-2012, Yeeku.H.Lee 5 * This program is protected by copyright laws. 6 * Program Name: 7 * Date: 8 * @author Yeeku.H.Lee kongyeeku@163.com 9 * @version 1.0 10 */ 11 public class ProgressDialogTest extends Activity 12 { 13 // 该程序模拟填充长度为100的数组 14 private int[] data = new int[100]; 15 int hasData = 0; 16 // 定义进度对话框的标识 17 final int PROGRESS_DIALOG = 0x112; 18 // 记录进度对话框的完成百分比 19 int progressStatus = 0; 20 ProgressDialog pd; 21 // 定义一个负责更新的进度的Handler 22 Handler handler; 23 24 @Override 25 public void onCreate(Bundle savedInstanceState) 26 { 27 super.onCreate(savedInstanceState); 28 setContentView(R.layout.main); 29 Button execBn = (Button) findViewById(R.id.exec); 30 execBn.setOnClickListener(new OnClickListener() 31 { 32 public void onClick(View source) 33 { 34 showDialog(PROGRESS_DIALOG); 35 } 36 }); 37 handler = new Handler() 38 { 39 @Override 40 public void handleMessage(Message msg) 41 { 42 // 表明消息是由该程序发送的。 43 if (msg.what == 0x111) 44 { 45 pd.setProgress(progressStatus); 46 } 47 } 48 }; 49 } 50 51 @Override 52 public Dialog onCreateDialog(int id, Bundle status) 53 { 54 System.out.println("------create------"); 55 switch (id) 56 { 57 case PROGRESS_DIALOG: 58 // 创建进度对话框 59 pd = new ProgressDialog(this); 60 pd.setMax(100); 61 // 设置对话框的标题 62 pd.setTitle("任务完成百分比"); 63 // 设置对话框 显示的内容 64 pd.setMessage("耗时任务的完成百分比"); 65 // 设置对话框不能用“取消”按钮关闭 66 pd.setCancelable(false); 67 // 设置对话框的进度条风格 68 pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); //圆形进度条 69 // pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//水平进度条 70 // 设置对话框的进度条是否显示进度 71 pd.setIndeterminate(false); 72 break; 73 } 74 return pd; 75 } 76 77 // 该方法将在onCreateDialog方法调用之后被回调 78 @Override 79 public void onPrepareDialog(int id, Dialog dialog) 80 { 81 System.out.println("------prepare------"); 82 super.onPrepareDialog(id, dialog); 83 switch (id) 84 { 85 case PROGRESS_DIALOG: 86 // 对话框进度清零 87 pd.incrementProgressBy(-pd.getProgress()); 88 new Thread() 89 { 90 public void run() 91 { 92 while (progressStatus < 100) 93 { 94 // 获取耗时操作的完成百分比 95 progressStatus = doWork(); 96 // 发送消息到Handler 97 Message m = new Message(); 98 m.what = 0x111; 99 // 发送消息100 handler.sendMessage(m);101 }102 103 // 如果任务已经完成104 if (progressStatus >= 100)105 {106 // 关闭对话框107 pd.dismiss();108 }109 }110 }.start();111 break;112 }113 }114 115 // 模拟一个耗时的操作。116 public int doWork()117 {118 // 为数组元素赋值119 data[hasData++] = (int) (Math.random() * 100);120 try121 {122 Thread.sleep(100);123 }124 catch (InterruptedException e)125 {126 e.printStackTrace();127 }128 return hasData;129 }130 }