利用任务线程创建进度对话框的方法

        在很多应用中都会使用到进度条组件,那么如何来控制进度条上的进度呢?当然,肯定会使用线程来控制他的进度。在这里,我们使用了任务线程的方式来控制,简单地模拟了进度的变化。

import com.review.review.R;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
/**
 * 利用任务线程实现进度条刻度的问题
 * @author Ad
 *
 */
public class TestTaskActivity extends Activity implements OnClickListener{
	/**
	 * 任务线程
	 * @author Ad
	 *泛型的参数类型是以下方法的参数类型
	 */
	public class MyTask extends AsyncTask<String,Integer,Boolean>{
		
		/**
		 * 子线程运行的方法
		 * 参数:字符串类型的数组
		 */
		@Override
		protected Boolean doInBackground(String... params) {
			for(int i = 0;i <= 100;i++){
				//调用主线程的方法
				publishProgress(i);
				try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			return null;//泛型参数boolean的返回类型
		}
		/**
		 * 每次调用publishProgress时调用的方法
		 * 参数:整型类型的数组
		 */
		@Override
		protected void onProgressUpdate(Integer... values) {
			super.onProgressUpdate(values);
			Log.i("i", values[0]+"");
			dialog.setProgress(values[0]);
		}
		/**
		 * 当doInBackground方法结束后调用的方法
		 * 布尔类型的数组
		 */
		@Override
		protected void onPostExecute(Boolean result) {
			super.onPostExecute(result);
			
			dialog.setMessage("进度完成");
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			dialog.setProgress(0);//把进度条清0
			dialog.cancel();//取消进度对话框
		}
	}
	private Button progressBtn;
	private ProgressDialog dialog;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.test_task_main);
		progressBtn = (Button) findViewById(R.id.test_task_main_btn_progress);
		progressBtn.setOnClickListener(this);
	}
	
	@Override
	protected Dialog onCreateDialog(int id) {
		
		if(id == 0){
			dialog  = new ProgressDialog(this);
			dialog.setMax(100);
			dialog.setTitle("进度对话框");
			dialog.setMessage("开始加载进度");
			dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
			dialog.show();
			//启动任务
			MyTask task = new MyTask();
			task.execute(null);
		}
		return super.onCreateDialog(id);
	}
	@Override
	public void onClick(View v) {
		if(v == progressBtn){
			showDialog(0);
		}
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值