Android下載進度條,一個通俗易懂案例

<pre name="code" class="java"><pre name="code" class="plain">這裏我只貼上activity代碼,相關的註釋,看代碼裏面的就可以了。





package org.lxh.demo;
 

import org.lxh.demo.R;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
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;
import android.widget.Toast;

public class Demo extends Activity { 
	private Button btnDownload;
	private Thread thread;
	private ProgressDialog diaProgress;
	private String isInterrupted;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);  
		btnDownload = (Button) findViewById(R.id.download_btn);
		btnDownload.setOnClickListener(new OnClickListenerImpl()) ; 
	}

	private class OnClickListenerImpl implements OnClickListener {

		@Override
		public void onClick(View view) {
			isInterrupted = "N";
			diaProgress = new ProgressDialog(Demo.this);
			diaProgress.setTitle("Download"); //設置標題
			diaProgress.setMessage("Please wait..."); //設置提示文字
			diaProgress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); //進度條的風格-水平
			diaProgress.setProgress(0); //初始進度值
			diaProgress.setMax(100); //最大的進度值
			//第一個按鈕監聽,隱藏
			diaProgress.setButton("Hide",
					new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							//雖然進度條隱藏了,但不代表“下載”有結果
							diaProgress.dismiss();
						}
					});
			//第二個按鈕監聽,取消
			diaProgress.setButton2("Cancel",
					new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							diaProgress.dismiss();
							sendMsg(3);
							sendMsg(2); //這裏的暫停方法,不是很理解,但網上都這麼說,大家有什麼看法,可以交流下
							sendMsg(1);
						}
					});
			diaProgress.onStart(); //進度條開始執行工作 
			//設置線程
			thread = new Thread(new Runnable() {
				@Override
				public void run() {
					int i = 0;
					while(i != 100){ 
						if(isInterrupted.equals("Y")){
							break;
						}
						try {
							//暫停0.5秒,純屬爲了模擬效果,當然實際的做法不是這樣的
							Thread.sleep(100); 
						} catch (InterruptedException e) { 
							e.printStackTrace();
						}
						diaProgress.incrementProgressBy(1);
						i += 1;
					}
					diaProgress.dismiss();
					sendMsg(0);
				}
			});
			thread.start();
			diaProgress.show(); //進度條開始顯示(實際到這裏纔開始真正工作)
		}
	}

	private Handler handler = new Handler() {
		public void handleMessage(Message msg) {
			diaProgress.dismiss();
			switch (msg.what) {
			case 0:
				Toast.makeText(Demo.this, "download successfully",
						Toast.LENGTH_LONG).show();
				break;
			case 1:
				Toast.makeText(Demo.this,
						"download has been interrupted", Toast.LENGTH_LONG)
						.show();
				break;
			case 2:
				// stop the thread
				thread.interrupt();
				break;
			case 3:
				isInterrupted = "Y";
			default:
				break;
			}
		}
	};

	private void sendMsg(int flag) {
		Message msg = new Message();
		msg.what = flag;
		handler.sendMessage(msg);
	}
}


demo請看:點擊打開鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章