前言:
先解释这里的进度条的用处 , 当一个页面切换到另外一个页面, 需要从后台加载些载入页面所需的数据, 此时显示的 一个对话框或者进度条!
举个栗子:
当你打开一个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 stub return progressDialog != null; } /* * (non-Javadoc) * * @see com.ishow.beycare.task.IProgress#start(java.lang.CharSequence) */ public void startProgress() { // TODO Auto-generated method stub progressDialog = 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 stub if (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 stub if (isAvailable()) { progressDialog.setProgress(value); } } /* * (non-Javadoc) * * @see com.ishow.beycare.task.IProgress#setIndeterminate(boolean) */ public void setIndeterminate(boolean indeterminate) { // TODO Auto-generated method stub if (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() */ @Override protected 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(); } } @Override protected abstract String doInBackground(Void... params); }
ContextTask
public class ContextTask extends BaseTask{ public ContextTask(int requestCode) { super(requestCode); // TODO Auto-generated constructor stub } @Override protected String doInBackground(Void... params) { // TODO Auto-generated method stub String result = "该方法并不运行在UI线程当中,主要用于异步操作,所以在该方法中不能对UI当中的空间进行设置和修改 "; return result; } @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); } @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub super.onPostExecute(result); } }
UI中调用
public class ListContainActivity extends Activity{ private TabHost tabHost ; ContextTask contextTask ; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.showcontain); contextTask = new ContextTask(0); TaskHost taskHost = new TaskHost(){ @Override public void onPreExecute(int requestCode) { // TODO Auto-generated method stub super.onPreExecute(requestCode); } }; contextTask.setTaskHost(taskHost); contextTask.setProgress(new SimpleDialogProgress(this, "加载LIST", "正在加载中...")); contextTask.execute(); }