gpt4 book ai didi

方向更改时未保留 Android DialogFragment

转载 作者:太空狗 更新时间:2023-10-29 12:40:46 24 4
gpt4 key购买 nike

我只是想在 Android 中保留一个关于方向的对话框,我认为这很简单。但它并没有像我想象的那样工作。我的 Activity 有一个简单的成员类,名为 StartMonitoringDialogFragment,它扩展了 DialogFragment。在我的 Activity 中,我将其展示为:

    StartMonitoringDialogFragment dialog = new StartMonitoringDialogFragment();
dialog.show(getFragmentManager(), getClass().getName() + "StartDialog");

但是,对话框不会出现在方向更改时。我注意到 fragment onCreateView 在方向更改后被正确调用,并且正在正确创建和返回其 View ( fragment 的实例变量仍然设置),但是没有显示任何内容。不是应该显示吗?我需要手动跟踪吗?

编辑我试图通过添加

来解决这个问题
    Fragment dialog;
if(savedInstanceState != null && (dialog = getFragmentManager().findFragmentByTag(getClass().getName() + "StartDialog")) != null) {
((DialogFragment)dialog).show(getFragmentManager(), getClass().getName() + "StartDialog");
}

到我的 Activities onCreate(Bundle savedInstanceState) 方法,它最初似乎有效,但我现在经常遇到异常 java.lang.IllegalStateException: Fragment already added。有什么想法吗?

最佳答案

这是一个 known issue ,由于某种原因,即使没有支持库也会发生这种情况。

无论如何,我发现一种可行的解决方法是将其添加到您拥有的每个 DialogFragment(当然,或者所有将扩展的基础 fragment ):

@Override
public void onDestroyView() {
//workaround for this issue: https://code.google.com/p/android/issues/detail?id=17423 (unable to retain instance after configuration change)
if (getDialog() != null && getRetainInstance())
getDialog().setDismissMessage(null);
super.onDestroyView();
}

关于方向更改时未保留 Android DialogFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26463947/

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