自定义对话框片段中的静态内部 class?

static inner class in custom dialogfragment?

如果我要定义一个 dialogfragment,例如:

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

private ProgressBar dialogProgressBar;

并在 MyDialogFragment 内有一个自定义 AsyncTask 作为内部 class,例如:

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

  2. 同样,由于 MyAsyncTaskstatic,我如何才能在 onPostExecute 中关闭此对话框?

对话框像这样启动异步任务:

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

我制作了 MyAsyncTask 静态内部 class 因为否则,如果对话框被关闭并因此被销毁,我将不会泄漏 MyDialogFragment

您可以通过以下方式将对话框作为参数传递给 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 作为参数传递给 class

的构造函数
     public MyAsyncTask(ProgressBar progressBar){
             //save the progressbar for use in the postexecute
       }