Dialog工具箱 – ProgressDialog
来源:互联网 发布:淘宝真假混卖店铺美妆 编辑:程序博客网 时间:2024/05/22 04:37
在此前的几个教程中引出过一些Dialog的使用方法,可从来没有系统全面的介绍Android平台上所有Dialog家族成员的情况(其实官方文档有相当明确的说明:参考1、参考2)。对于大部分人可以直接根据官方文档获得有关Dialog的使用方法,AR给出的有关Dialog参考教程可以作为额外的补充。
在这里为大家介绍ProgressDialog的使用方法:
1) 创建一个普通ProgressDialog(不带有ProgressBar)所必须的几个参数
- Context: 指定当前Dialog的Container
- Title:对话框标题
- Message:对话框主体所显示的信息
- Indeterminate:不确定性属性,这个属性对于ProgressDailog默认的转轮模式没有实际意义,默认下设置为true,它仅仅对带有ProgressBar的Dialog有作用。
2)以下两个为可选参数
- Cancelable:增加一个可以Cancel当前Dialog的按钮,强制退出。
- CancelListner:当前Dialog强制取消之后将会被执行,通常用来清理未完成的任务。
快速创建一个ProgressDialog的方法(代码片段):
01.private ProgressDialog dialog;
02.private Handler handler = new Handler() {
03. public void handleMessage(Message msg)
04. {
05. dialog.dismiss();
06. }
07.};
08.private Thread checkUpdate = new Thread()
09.{
10. public void run() {
11.
12. try {
13. sleep(3000);
14. } catch (InterruptedException e) {
15. // TODO Auto-generated catch block
16. e.printStackTrace();
17. }
18. handler.sendEmptyMessage(0);
19. }
20.};
21.@Override
22.public void onCreate(Bundle savedInstanceState) {
23. super.onCreate(savedInstanceState);
24. setContentView(R.layout.main);
25.
26. final Button button = (Button) findViewById(R.id.Compute);
27. button.setOnClickListener(new View.OnClickListener()
28. {
29.
30. public void onClick(View arg0) {
31. // TODO Auto-generated method stub
32. checkUpdate.stop();
33. dialog = ProgressDialog.show(ARTestDrawing2D.this,
34. "AndroidRes",
35. "I am thinking...",
36. true,true);
37. checkUpdate.start();
38. }
39.
40. });
41.}
上边的例子中引用了Handler(official)作为multi-thread相互传递数据的载体,接下来为ProgressDialog实现一个可视化进度条(progressBar)的方法中依然需要调用Handler(Internal),借用这个例子大家也可以多了解Handler的用法。
利用一个可视化进度条取代第一个例子中比较抽象的旋转轮,让用户更加直观的了解当前任务的进度。初始化的方法如下:
1.dialog = new ProgressDialog(ARTestDrawing2D.this);
2.dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
3.dialog.setTitle("AndroidRes");
4.dialog.setMessage("I am thinking...");
看起来稍微比第一个例子复杂一些,每个参数都单独利用成员方法赋值。
其中SetProgressStyle用来设置显示模式,通常为STYLE_HORIZONTAL。下边通过一个完整的例子了解它的初始化和设置方法(例子来源于Android官网):
01.static final int PROGRESS_DIALOG = 0;
02.Button button;
03.ProgressThread checkUpdate;
04.ProgressDialog dialog;
05.
06./** Called when the <a title="activity" href="http://www.androidres.com/index.php/2009/02/09/activity/">activity</a> is first created. */
07.public void onCreate(Bundle savedInstanceState) {
08. super.onCreate(savedInstanceState);
09. setContentView(R.layout.main);
10.
11. // Setup the button that starts the progress dialog
12. button = (Button) findViewById(R.id.Compute);
13. button.setOnClickListener(new OnClickListener(){
14. public void onClick(View v) {
15. showDialog(PROGRESS_DIALOG);
16. }
17. });
18.}
19.
20.protected Dialog onCreateDialog(int id) {
21. switch(id) {
22. case PROGRESS_DIALOG:
23. dialog = new ProgressDialog(ARTestDrawing2D.this);
24. dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
25. dialog.setTitle("AndroidRes");
26. dialog.setMessage("I am thinking...");
27. checkUpdate = new ProgressThread(handler);
28. checkUpdate.start();
29. return dialog;
30. default:
31. return null;
32. }
33.}
34.
35.// Define the Handler that receives messages from the thread and update the progress
36.final Handler handler = new Handler() {
37. public void handleMessage(Message msg) {
38. int total = msg.getData().getInt("total");
39. dialog.setProgress(total);
40. if (total >= 100){
41. dismissDialog(PROGRESS_DIALOG);
42. checkUpdate.setState(ProgressThread.STATE_DONE);
43. total = 0;
44. }
45. }
46.};
47.
48./** Nested class that performs progress calculations (counting) */
49.private class ProgressThread extends Thread {
50. Handler mHandler;
51. final static int STATE_DONE = 0;
52. final static int STATE_RUNNING = 1;
53. int mState;
54. int total;
55.
56. ProgressThread(Handler h) {
57. mHandler = h;
58. }
59.
60. public void run() {
61. mState = STATE_RUNNING;
62. total = 0;
63. while (mState == STATE_RUNNING) {
64. try {
65. Thread.sleep(100);
66. } catch (InterruptedException e) {
67. Log.e("ERROR", "AndroidRes Thread Interrupted");
68. }
69. Message msg = mHandler.obtainMessage();
70. Bundle b = new Bundle();
71. b.putInt("total", total);
72. msg.setData(b);
73. mHandler.sendMessage(msg);
74. total++;
75. }
76. }
77.
78. /* sets the current state for the thread,
79. * used to stop the thread */
80. public void setState(int state) {
81. mState = state;
82. }
83.}
例子理解起来相对比较容易,对两个比较主要的对象做个简单的说明:
checkUpdate: 从主线程中创建一个用于计算某项任务的线程,同时也是利用ProgessBar所追踪的对象,指示这个线程的任务进度。
handler: 利用这个Handler可以将线程中的数据实时反映到主线程中的ProgessBar,使其可以实时接收到最新进度数据。
Share and Enjoy:
- Dialog工具箱 – ProgressDialog
- Dialog的使用(三):progressDialog
- dialog progressdialog alertdialog 焦点等
- android开发中-使用Dialog ProgressDialog
- android开发中-使用Dialog ProgressDialog
- Android自定义类似ProgressDialog效果的Dialog
- Android自定义类似ProgressDialog效果的Dialog
- Android自定义类似ProgressDialog效果的Dialog
- Android自定义类似ProgressDialog效果的Dialog
- Android自定义类似ProgressDialog效果的Dialog
- Android自定义类似ProgressDialog效果的Dialog
- Android自定义类似ProgressDialog效果的Dialog
- Android自定义类似ProgressDialog效果的Dialog
- Android开发之Dialog(AlertDialog,ProgressDialog)
- Android自定义类似ProgressDialog效果的Dialog
- Android自定义类似ProgressDialog效果的Dialog
- Android自定义类似ProgressDialog效果的Dialog
- Android自定义类似ProgressDialog效果的Dialog
- hibernate 多对多试验
- '''Tkinter教程之Event篇(1)'''
- JS刷新当前页面
- 洗牌程序
- 面向对象编程(OOP)、面向组件编程(COP)、面向方面编程(AOP)和面向服务编程(SOP)【转】
- Dialog工具箱 – ProgressDialog
- JNI生命周期与多线程
- 关于RSL的另一个体会
- ProgressDialog使用
- 分布式系统
- socketaddr和socketaddr_in的区别于联系
- '''Tkinter教程之Frame篇'''
- Qt Container Classes
- Struts Junit