Сбой DialogFragment Activity при вызове startActivity ()
у меня естьDialogFragment
это должно было быть просто, но это доставляет мне большие проблемы именно с Jelly Bean.
Приложение использует сеть, и появляется диалоговое окно с просьбой включить или отключить WiFi, а затем закрывает его. Так расширяетсяDialogFragment
и создает вид как:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog a = new AlertDialog.Builder(getActivity()).setCancelable(true).setTitle(R.string.dialog_title_disabled)
.setMessage(R.string.dialog_text)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dismiss();
Intent i = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
}).setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
getActivity().finish();
}
}).create();
//a.setCanceledOnTouchOutside(false);
return a;
}
Если пользователь нажимает кнопку «Да», он закрывает диалоговое окно и открывает действие «Параметры беспроводной сети». Или, если пользователь нажимает кнопку Отмена, он просто закрывает всю мою деятельность, но в Jelly Bean, каждый раз, когда я нажимаю Да, он открывает настройки, но приложение закрывается со следующей ошибкой:
08-05 20:24:22.584: E/AndroidRuntime(2579): java.lang.IllegalStateException: Failure saving state: active SettingsDialogFragment{425dd550} has cleared index: -1
08-05 20:24:22.584: E/AndroidRuntime(2579): at android.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1653)
Есть некоторая дополнительная регистрация, показывающая сохраненное состояние каждого фрагмента, который был на моем макете, и номер 2, который должен был бытьSettingsDialogFragment
это простоnull
:
08-05 20:24:22.576: E/FragmentManager(2579): #2: null
Я пытался не закрывать диалог, но он вылетал так же.
Я действительно не уверен, что здесь происходит & # x2026; Есть идеи?
EDIT:Код активности (это нормальная активность, потому что приложение предназначено для ICS и выше):
private void showDialog() {
SettingsDialogFragment diag = (SettingsDialogFragment) getFragmentManager().findFragmentByTag(DIALOG_TAG);
if (diag == null) {
diag = new SettingsDialogFragment();
diag.show(getFragmentManager(), DIALOG_TAG);
} else {
if (!diag.isVisible())
diag.show(getFragmentManager(), DIALOG_TAG);
}
}
private void dismissDialog() {
SettingsDialogFragment diag = (SettingsDialogFragment) getFragmentManager().findFragmentByTag(DIALOG_TAG);
if (diag != null)
diag.dismiss();
}