2014年4月27日日曜日

バックグラウンド処理の間プログレスダイアログを表示するAsyncTask

AsyncTaskのパラメタライズはそのままに、共通化したい前処理や後処理を実装するとこんな感じ。

  1. /** 
  2.  * バックグラウンド処理の間にキャンセルできないプログレスダイアログを表示する 
  3.  */  
  4. public abstract class ModalProgressTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {  
  5.   
  6.     private final WeakReference<ProgressDialog> mProgressRef;  
  7.   
  8.     public ModalProgressTask(Context context, String message) {  
  9.         ProgressDialog dialog = new ProgressDialog(context);  
  10.         dialog.setMessage(message);  
  11.         dialog.setCancelable(false);  
  12.         mProgressRef = new WeakReference<ProgressDialog>(dialog);  
  13.     }  
  14.   
  15.     @Override  
  16.     protected void onPreExecute() {  
  17.         super.onPreExecute();  
  18.         ProgressDialog dialog = mProgressRef.get();  
  19.         if (dialog != null && !dialog.isShowing()) {  
  20.             dialog.show();  
  21.         }  
  22.     }  
  23.   
  24.     @Override  
  25.     protected void onPostExecute(Result result) {  
  26.         super.onPostExecute(result);  
  27.         ProgressDialog dialog = mProgressRef.get();  
  28.         if (dialog != null && dialog.isShowing()) {  
  29.             dialog.dismiss();  
  30.         }  
  31.     }  
  32.   
  33.     @Override  
  34.     protected void onCancelled() {  
  35.         super.onCancelled();  
  36.         ProgressDialog dialog = mProgressRef.get();  
  37.         if (dialog != null && dialog.isShowing()) {  
  38.             dialog.dismiss();  
  39.         }  
  40.     }  
  41. }  



0 件のコメント:

コメントを投稿