在我的主要活動中,我有一個片段,其中應用了setRetainInstance(true),以便我使用的AsyncTask不受方向更改的干擾。帶屏幕旋轉的片段上的DialogFragment
大量的工作由AsyncTask處理。這就是爲什麼我想在我的活動之上顯示一個帶有progressBar的對話框。
我做了一些研究,我與DialogFragment做成功:
公共類DialogWait擴展DialogFragment {
private ProgressBar progressBar;
public DialogWait() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_wait, container);
Dialog dialog = getDialog();
dialog.setTitle("Hello");
setCancelable(false);
progressBar = (ProgressBar) view.findViewById(R.id.progress);
return view;
}
public void updateProgress(int value) {
progressBar.setProgress(value);
}
這裏是我的AsyncTask:
public class InitAsyncTask extends AsyncTask<Void, Integer, Void> {
private Context activity;
private OnTaskDoneListener mCallback;
private DialogWait dialog;
public InitAsyncTask(Context context, OnTaskDoneListener callback, DialogWait dialogWait) {
activity = context;
mCallback = callback;
dialog = dialogWait;
}
@Override
protected Void doInBackground(Void... params) {
doStuff();
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
dialog.updateProgress(values[0]);
}
@Override
protected void onPostExecute(Void result) {
publishProgress(100);
if(dialog != null)
dialog.dismiss();
mCallback.onTaskDone();
}
private void doStuff() {
//...
}
}
如果我不改變屏幕旋轉,它工作正常。但如果我這樣做,對話框被解僱,幾秒鐘後,我得到了一個空指針,這是無意義的,因爲我設置了條件:if(dialog!= null)
我在做什麼錯?
我試過,但行爲是完全一樣的... – lost17
@Shajeel你不應該使用setRetainInstance和UI片段,我假設dialogframents自動適合這個描述? – Maxrunner