gpt4 book ai didi

android - DialogFragment 在调用 startActivity() 时使 Activity 崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:27:49 24 4
gpt4 key购买 nike

我有一个本应很简单的 DialogFragment,但它给我带来了一些大问题,特别是在 Jelly Bean 上。

该应用程序使用网络,它会弹出一个对话框,要求用户打开或取消 WiFi,然后将其关闭。因此它扩展了 DialogFragment 并创建了如下 View :

@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;
}

如果用户点击是,它会关闭对话框并打开无线设置 Activity 。或者,如果用户单击“取消”,它只会关闭我的整个 Activity ,但在 Jelly Bean 上,只要我单击"is",它就会打开“设置”,但应用会强制关闭并出现以下错误:

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)

有一些额外的日志记录显示了我布局上每个 fragment 的保存状态,而应该是 SettingsDialogFragment 的数字 2 只是一个 null:

08-05 20:24:22.576: E/FragmentManager(2579):     #2: null

我试着不关闭对话,但它还是以同样的方式崩溃了。

我真的不确定这里发生了什么……有什么想法吗?


编辑:

Activity 代码(这是一个正常的 Activity,因为该应用程序针对 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();
}

最佳答案

显然 Google 将某些内容从 ICS 更改为 JB,并取消了我不得不使用的对话:

dismiss();
getFragmentManager().beginTransaction().remove(frag).commit();

似乎 dialogFragment 并没有像以前那样从 fragment 管理器 OnDismiss 中删除自己,如果有人愿意深入研究源代码并仔细检查社区,那就太棒了。

谢谢。

关于android - DialogFragment 在调用 startActivity() 时使 Activity 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11819460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com