自定义dialogfragment中的静态内部类?

时间:2015-02-15 20:22:14

标签: android android-asynctask

如果我要定义一个对话片段,如:

public class MyDialogFragment extends DialogFragment implements
DialogInterface.OnClickListener, DialogInterface.OnShowListener, 
DialogInterface.OnDismissListener {

private ProgressBar dialogProgressBar;

并将自定义AsyncTask作为MyDialogFragment内的内部类,如:

public static class MyAsyncTask extends AsyncTask<Void, Integer, Void> {
  1. MyAsyncTask访问dialogProgressBar的最佳方式是什么?我可以制作dialogProgressBar static,但这意味着我的所有对话框都共享相同的进度条,这是没有意义的

  2. 同样,由于MyAsyncTaskstatic,我怎么能在onPostExecute中忽略此对话框?

  3. 对话框启动asynctask,如下所示:

    @Override public void onShow(DialogInterface dialog) {
        myTask = new MyAsyncTask();
        myTask.execute();
    }
    

    我将MyAsyncTask作为STATIC内部类,否则,如果对话框被解除并因此被破坏,我就不会泄漏MyDialogFragment

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式将对话框作为参数传递给AsyncTask

public static class MyAsyncTask extends AsyncTask<ProgressBar, Integer, Void> {
WeakReference<ProgressBar> progressBar;
protected Void doInBackground(ProgressBar...params){

   if(params!=null && params.length>0){

          progressBar = new WeakReference<ProgressBar>(params[0]);
   }
   ///do stuff
}

protected Void onPostExecute(Void result){

  ProgressBar p = progressBar.get();
   if(p!=null){
    p.dismiss();
   } 
}
}

方式#2 - 您可以将ProgressBar作为类的构造函数中的参数传递

     public MyAsyncTask(ProgressBar progressBar){
             //save the progressbar for use in the postexecute
       }