删除 DialogFragment 的正确方法:dismiss() 或 transaction.remove()?

Yoa*_*uet 4 android android-dialogfragment

由于DialogFragment用于我的主要活动,我仍然有问题。

我目前正在使用此代码将其删除:

FragmentTransaction transaction = getFragmentManager().beginTransaction();
Fragment frag = getFragmentManager().findFragmentByTag("LockDialog");

if(frag != null) {
    transaction.remove(frag);
    transaction.commit();
}
Run Code Online (Sandbox Code Playgroud)

问题是,由于对话框有重复(意味着有时没有正确删除对话框),我仍然会崩溃。

所以我的问题是:删除 a 是正确的方法DialogFragment还是必须仅用于Fragments

我必须一直使用该dismiss()方法吗?:

Fragment lockFragment = getFragmentManager().findFragmentByTag("LockDialog");

//If the dialog already exist, we dismiss it
if(lockFragment != null  && lockFragment instanceof LockDialogFragment) {
    LockDialogFragment lockDialog = (LockDialogFragment) lockFragment;
    lockDialog.dismiss();
}
Run Code Online (Sandbox Code Playgroud)

这是目前我在我的一个应用程序中最大的错误,所以我想在选择一个或另一个之前确定。

谢谢!

编辑:我刚刚意识到我当前的问题可能是由于提交可能会延迟这一事实,我会添加executePendingTransactions以查看它是否变得更好。但它仍然带来了另一个问题,如果对话框已被关闭,是否有必要调用 transaction.remove() ?使用dismiss()比使用交易更直接和安全吗?

mat*_*ash 5

DialogFragment.dismiss()是正确的方法。从文档

关闭片段及其对话框。如果片段被添加到后退堆栈,则直到并包括此条目的所有后退堆栈状态都将被弹出。否则,将提交一个新事务以删除该片段。