junefsh 发表于 2013-1-28 18:53:27

使用线程跟踪进度条当前进度示例

主要是通过android.os.Handler的消息机制实现控制

package com.example.progressdialog;import android.app.Activity;import android.app.Dialog;import android.app.ProgressDialog;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class NotificationTest extends Activity {    static final int PROGRESS_DIALOG = 0;    Button button;    ProgressThread progressThread;    ProgressDialog progressDialog;       /** Called when the activity is first created. */    public void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.main);      // Setup the button that starts the progress dialog      button = (Button) findViewById(R.id.progressDialog);      button.setOnClickListener(new OnClickListener(){            public void onClick(View v) {                showDialog(PROGRESS_DIALOG);            }      });   }       protected Dialog onCreateDialog(int id) {      switch(id) {      case PROGRESS_DIALOG:            progressDialog = new ProgressDialog(NotificationTest.this);            progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);            progressDialog.setMessage("Loading...");            progressThread = new ProgressThread(handler);            progressThread.start();            return progressDialog;      default:            return null;      }    }    // Define the Handler that receives messages from the thread and update the progress    final Handler handler = new Handler() {      public void handleMessage(Message msg) {            int total = msg.getData().getInt("total");            progressDialog.setProgress(total);            if (total >= 100){                dismissDialog(PROGRESS_DIALOG);                progressThread.setState(ProgressThread.STATE_DONE);            }      }    };    /** Nested class that performs progress calculations (counting) */    private class ProgressThread extends Thread {      Handler mHandler;      final static int STATE_DONE = 0;      final static int STATE_RUNNING = 1;      int mState;      int total;               ProgressThread(Handler h) {            mHandler = h;      }               public void run() {            mState = STATE_RUNNING;               total = 0;            while (mState == STATE_RUNNING) {                try {                  Thread.sleep(100);                } catch (InterruptedException e) {                  Log.e("ERROR", "Thread Interrupted");                }                Message msg = mHandler.obtainMessage();                Bundle b = new Bundle();                b.putInt("total", total);                msg.setData(b);                mHandler.sendMessage(msg);                total++;            }      }                /* sets the current state for the thread,         * used to stop the thread */      public void setState(int state) {            mState = state;      }    }}
页: [1]
查看完整版本: 使用线程跟踪进度条当前进度示例