android 毕设点滴之显示进度条(二)

来源:互联网 发布:中昌数据股票 编辑:程序博客网 时间:2024/05/20 16:11

前言:

先解释这里的进度条的用处 , 当一个页面切换到另外一个页面, 需要从后台加载些载入页面所需的数据, 此时显示的 一个对话框或者进度条!

举个栗子:

当你打开一个web站点, 你能忍受 网页从上到下 一点一点, 要么冒出一点要么冒出一点这么感受嘛!!!

然而当你打开的另一个web站点, 该站点使用一个很友好的 进度条效果 ,我想这起码不会使用户对此感到太大的反感!


IProgress

public interface IProgress {public boolean isAvailable();public void startProgress();public void finishProgress();public void updateProgressMessage(CharSequence message);public void updateProgress(Integer value);public void setIndeterminate(boolean indeterminate);}

一个简单的进度条效果的实现类 SimpleDialogProgress,


public class SimpleDialogProgress implements IProgress {private Context context = null;private ProgressDialog progressDialog = null;private CharSequence title = "";private CharSequence message = "";public SimpleDialogProgress(Context context) {this.context = context;this.message = context.getString(R.string.progress_operating);}public SimpleDialogProgress(Context context, CharSequence title) {this.context = context;this.title = title;this.message = context.getString(R.string.progress_operating);}public SimpleDialogProgress(Context context, CharSequence title,CharSequence message) {this.context = context;this.title = title;this.message = message;}/* * (non-Javadoc) *  * @see com.ishow.beycare.task.IProgress#isAvailable() */public boolean isAvailable() {// TODO Auto-generated method stubreturn progressDialog != null;}/* * (non-Javadoc) *  * @see com.ishow.beycare.task.IProgress#start(java.lang.CharSequence) */public void startProgress() {// TODO Auto-generated method stubprogressDialog = ProgressDialog.show(context, title, message, true,false);}public void finishProgress() {if (isAvailable()) {progressDialog.dismiss();}}/* * (non-Javadoc) *  * @see com.ishow.beycare.task.IProgress#updateMessage(java.lang.String) */public void updateProgressMessage(CharSequence message) {// TODO Auto-generated method stubif (isAvailable()) {progressDialog.setMessage(message);}}/* * (non-Javadoc) *  * @see com.ishow.beycare.task.IProgress#updateProgress(java.lang.Integer) */public void updateProgress(Integer value) {// TODO Auto-generated method stubif (isAvailable()) {progressDialog.setProgress(value);}}/* * (non-Javadoc) *  * @see com.ishow.beycare.task.IProgress#setIndeterminate(boolean) */public void setIndeterminate(boolean indeterminate) {// TODO Auto-generated method stubif (isAvailable()) {progressDialog.setIndeterminate(indeterminate);}}}
TaskHost

public class TaskHost {        public void onCancelled(int requestCode) {    }    public void onPostExecute(int requestCode, String result) {    }    public void onPreExecute(int requestCode) {    }}

BaseTask

public abstract class BaseTask extends AsyncTask<Void, Integer, String> {protected IProgress progress;protected TaskHost taskHost;protected int requestCode;public BaseTask(int requestCode) {// TODO Auto-generated constructor stub}public IProgress getProgress() {return progress;}public void setProgress(IProgress progress) {this.progress = progress;}public TaskHost getTaskHost() {return taskHost;}public void setTaskHost(TaskHost taskHost) {this.taskHost = taskHost;}public int getRequestCode() {return requestCode;}public void setRequestCode(int requestCode) {this.requestCode = requestCode;}/* * (non-Javadoc) *  * @see android.os.AsyncTask#onPreExecute() */@Overrideprotected void onPreExecute() {// 调用了接口的相应的方法if (progress != null) {progress.startProgress();progress.updateProgress(0);}if (taskHost != null) {taskHost.onPreExecute(requestCode);}super.onPreExecute();}protected void onPostExecute(String result) {super.onPostExecute(result);if (taskHost != null) {taskHost.onPostExecute(requestCode, result);}if (progress != null) {progress.updateProgress(100);progress.finishProgress();}}@Overrideprotected abstract String doInBackground(Void... params);}

ContextTask

public class ContextTask extends BaseTask{public ContextTask(int requestCode) {super(requestCode);// TODO Auto-generated constructor stub}@Overrideprotected String doInBackground(Void... params) {// TODO Auto-generated method stubString result = "该方法并不运行在UI线程当中,主要用于异步操作,所以在该方法中不能对UI当中的空间进行设置和修改 ";return result;}@Overrideprotected void onPreExecute() {// TODO Auto-generated method stubsuper.onPreExecute();}@Overrideprotected void onPostExecute(String result) {// TODO Auto-generated method stubsuper.onPostExecute(result);}}


UI中调用

public class ListContainActivity extends Activity{private  TabHost tabHost ;ContextTask contextTask ;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);this.requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.showcontain);contextTask = new ContextTask(0);TaskHost taskHost = new TaskHost(){@Overridepublic void onPreExecute(int requestCode) {// TODO Auto-generated method stubsuper.onPreExecute(requestCode);}};contextTask.setTaskHost(taskHost);contextTask.setProgress(new SimpleDialogProgress(this, "加载LIST", "正在加载中..."));contextTask.execute();}