强制DialogFragment在屏幕旋转后不重新创建

3
当我在我的应用程序中更改方向时,如果有一个可见的 DialogFragment 打开于我的 Activity 中,那么这个对话框将被重新创建。如何强制关闭它?
目前,我尝试将其存储为我的 activity 成员变量,并在 onCreate 中解除绑定,但此时它似乎为 null;

使用FragmentManager获取片段的引用,然后将其关闭。 - user
@Luksprog:你能详细说明一下吗? - adriennoir
1
当您显示DialogFragment时,请使用带有show()方法的标记字符串。在活动的onCreate()中,使用FragmentManager查找具有该标记的片段。如果您找到与该标记相关联的片段,则表示您先前已显示了DialogFragment,在这种情况下,您应该将其关闭。 - user
2个回答

5
为了禁用特定类型的DialogFragments的重新创建,您可以在派生的DialogFragment类中重写onCreate,并在它被重新创建时关闭对话框:
public class MyDialogFragment extends DialogFragment
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        if (savedInstanceState != null)
        {
            dismiss();
        }
    }
    ...

1
正如@Luksprog在评论中提到的那样,解决方案可能是:
在创建DialogFragment时给它一个标签:
FragmentManager fragmentManager = getSupportFragmentManager();
MyDialogFragment.newInstance(...).show(fragmentManager, "myTag");

在`onCreate`中搜索并解除它。
MyDialogFragment dialog = ((MyDialogFragment)getSupportFragmentManager().findFragmentByTag("myTag"));
if (dialog != null) {
    dialog.dismiss();
}

我认为禁用DialogFragment的重新创建可能会更有效,但我不知道是否可行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接