自定义对话框片段中的静态内部 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> {
MyAsyncTask
访问 dialogProgressBar
的最佳方式是什么?我可以制作 dialogProgressBar
static
但这意味着我所有的对话框共享相同的进度条,这没有意义
同样,由于 MyAsyncTask
是 static
,我如何才能在 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
}
如果我要定义一个 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> {
MyAsyncTask
访问dialogProgressBar
的最佳方式是什么?我可以制作dialogProgressBar
static
但这意味着我所有的对话框共享相同的进度条,这没有意义同样,由于
MyAsyncTask
是static
,我如何才能在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
}