歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android基礎教程:handler機制實現ProgressDialog

Android基礎教程:handler機制實現ProgressDialog

日期:2017/3/1 10:56:14   编辑:Linux編程

布局文件比較簡單,只有一個按鈕:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <Button android:text="Login"
  8. android:id="@+id/loginBtn"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. />
  12. </LinearLayout>
本程序參照mars老師的視頻寫的,下面是主程序代碼:
  1. package com.cloay;
  2. import android.app.Activity;
  3. import android.app.ProgressDialog;
  4. import android.content.DialogInterface;
  5. import android.os.Bundle;
  6. import android.os.Handler;
  7. import android.os.Message;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.Button;
  11. /**
  12. * Myhandler.java
  13. * @author Cloay
  14. * 2011-9-6
  15. */
  16. public class Myhandler extends Activity{
  17. private Button button;
  18. private ProgressDialog progressDialog;
  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. // TODO Auto-generated method stub
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.handler);
  24. button = (Button)findViewById(R.id.loginBtn);
  25. button.setOnClickListener(new loginBtnListener());
  26. }
  27. /*
  28. * 使用Handler更新UI
  29. */
  30. Handler handler = new Handler(){
  31. @Override
  32. public void handleMessage(Message msg) {
  33. //設置進度條當前值,並將線程對象放入線程隊列
  34. progressDialog.setProgress(msg.arg1);
  35. handler.post(updateThread);
  36. }
  37. };
  38. class loginBtnListener implements OnClickListener{
  39. @Override
  40. public void onClick(View v) {
  41. handler.post(updateThread);
  42. progressDialog = new ProgressDialog(Myhandler.this);
  43. progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
  44. progressDialog.setMessage("正在登陸,請稍後...");
  45. progressDialog.setTitle("登陸系統");
  46. progressDialog.setIcon(R.drawable.ask);
  47. progressDialog.setMax(100);
  48. progressDialog.setProgress(0);
  49. progressDialog.setCancelable(true);
  50. progressDialog.setButton("取消", new DialogInterface.OnClickListener() {
  51. @Override
  52. public void onClick(DialogInterface dialog, int which) {
  53. // TODO Auto-generated method stub
  54. dialog.dismiss();
  55. }
  56. });
  57. progressDialog.show();
  58. }
  59. }
  60. Runnable updateThread = new Runnable() {
  61. int i = 0;
  62. @Override
  63. public void run() {
  64. i += 5;
  65. Message msg = handler.obtainMessage(); //得到一個消息對象
  66. //將msg對象的參數設置為i,Message類共有兩個參數arg1和arg2,用這兩個成員變量傳遞消息的優點是系統性能消耗最少
  67. msg.arg1 = i;
  68. try {
  69. Thread.sleep(100);
  70. } catch (InterruptedException e) {
  71. e.printStackTrace();
  72. }
  73. //將msg壓入消息隊列,sendMessage方法是異步的,不等消息被處理,該方法就返回,繼續往下執行
  74. handler.sendMessage(msg);
  75. if(i == progressDialog.getMax()){
  76. //當i達到最大值時,從消息隊列中刪除msg
  77. handler.removeCallbacks(updateThread, msg);
  78. progressDialog.dismiss();
  79. }
  80. }
  81. };
  82. }
運行效果圖如下:

Copyright © Linux教程網 All Rights Reserved