异步加载进度显示
package com.rcsit.android.mas.email.dialog;import android.app.Activity;import android.app.ProgressDialog;import android.content.DialogInterface;import android.content.DialogInterface.OnCancelListener;import android.os.AsyncTask;import android.widget.Toast;/** * 异步加载类 * * @author wanglin(lin3.wang@changhong.com) * 2011-5-20下午04:01:02 */public abstract class LoadingDialog<Input, Result> extends AsyncTask<Input, WSError, Result> { private ProgressDialog mProgressDialog; protected Activity mActivity; private int mLoadingMsg; private int mFailMsg; private boolean mEnddismiss = true; public LoadingDialog(Activity activity, int loadingMsg, int failMsg) { this.mActivity = activity; this.mLoadingMsg = loadingMsg; this.mFailMsg = failMsg; } public LoadingDialog(Activity activity, int loadingMsg, int failMsg, boolean Enddismiss) { this.mActivity = activity; this.mLoadingMsg = loadingMsg; this.mFailMsg = failMsg; this.mEnddismiss = Enddismiss; } /** * 用户调用取消时,要做的操作 */ @Override public void onCancelled() { failMsg(); super.onCancelled(); } @Override public void onPreExecute() { String title = ""; String message = mActivity.getString(mLoadingMsg); mProgressDialog = ProgressDialog.show(mActivity, title, message, true, true, new OnCancelListener() { public void onCancel(DialogInterface dialogInterface) { LoadingDialog.this.cancel(true); } }); super.onPreExecute(); } /** * 后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。 */ @Override public abstract Result doInBackground(Input... params); /** * 相当于Handler 处理UI的方式 */ @Override public void onPostExecute(Result result) { super.onPostExecute(result); if (!this.mEnddismiss) mProgressDialog.dismiss(); if (result != null) { doStuffWithResult(result); } else { failMsg(); } if (this.mEnddismiss) mProgressDialog.dismiss(); } protected void failMsg() { Toast.makeText(mActivity, mFailMsg, 2000).show(); } /** * Very abstract function hopefully very meaningful name, executed when * result is other than null * * @param result * @return */ public abstract void doStuffWithResult(Result result); /** * 使用进度条增加用户体验度 */ @Override protected void onProgressUpdate(WSError... values) { Toast.makeText(mActivity, values[0].getMessage(), Toast.LENGTH_LONG) .show(); this.cancel(true); mProgressDialog.dismiss(); super.onProgressUpdate(values); }}
?