我有一个 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)
我的布局上有一些片段,额外的日志显示了它们的保存状态,原本应该是 SettingsDialogFragment
的编号是 null
:
08-05 20:24:22.576: E/FragmentManager(2579): #2: null
我试图不关闭对话框,但它仍然崩溃了。
我真的不知道这里发生了什么……有什么想法吗?
编辑:
活动代码(它是一个普通的活动,因为该应用程序针对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();
}
FragmentActivity
中。 - tolgapDialogFragment
但没有关闭AlertDialog
本身。如果用户点击“是”,你可以尝试使用dialog.dismiss()
而不是仅仅使用dismiss()
吗?字段dialog
可以作为onClick()
的第一个参数使用。 - SheIs_LeThiCongNhan