В моем основном действии у меня есть фрагмент, в котором я применяю setRetainInstance (true), так что AsyncTask, который я использую в нем, не мешает изменению ориентации.Диалог Фрагмент на фрагменте с поворотом экрана
Много работы обрабатываются 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() {
//...
}
}
Если я не меняю поворот экрана, он отлично работает. Но если я это сделаю, диалог будет уволен, и через несколько секунд у меня получилось NullPointerEsception, которое было бы бессмысленным, поскольку я установил условие: if (dialog! = Null)
Что я делаю неправильно?
Я попытался, но поведение точно такой же ... – lost17
@Shajeel вы не должны используйте setRetainInstance с фрагментами пользовательского интерфейса, я предполагаю, что диалоговые окна автоматически соответствуют этому описанию? – Maxrunner