1 /**
2 * Description:
3 * <br/>site: <a href="http://www.crazyit.org">crazyit.org</a>
4 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
5 * <br/>This program is protected by copyright laws.
6 * <br/>Program Name:
7 * <br/>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 try
121 {
122 Thread.sleep(100);
123 }
124 catch (InterruptedException e)
125 {
126 e.printStackTrace();
127 }
128 return hasData;
129 }
130 }