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

Android 删除DialogFragment的正确方法:Dismise()或transaction.remove()?,android,android-dialogfragment,Android,Android Dialogfragment,由于在我的主要活动中使用了对话框片段,我仍然有一个问题 我当前正在使用此代码删除它: FragmentTransaction transaction = getFragmentManager().beginTransaction(); Fragment frag = getFragmentManager().findFragmentByTag("LockDialog"); if(frag != null) { transaction.remove(frag); transact

由于在我的主要活动中使用了
对话框片段
,我仍然有一个问题

我当前正在使用此代码删除它:

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

if(frag != null) {
    transaction.remove(frag);
    transaction.commit();
}
问题是,由于该对话框有重复项(意味着该对话框有时未正确删除),我仍然会崩溃

所以我的问题是:删除
对话框片段
是一种正确的方法,还是只能用于
片段

我是否必须一直使用
dislose()
方法

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();
}
这是目前我的一个应用程序中最大的错误,所以我想在选择其中一个之前确定一下

谢谢

EDIT:我刚刚意识到我当前的问题可能是由于提交可能会延迟,我将添加
executePendingTransactions
,看看它是否会变得更好。
但它仍然带来了另一个问题,如果对话框被取消,是否有必要调用transaction.remove()?使用
disease()
是否比使用事务更直接、更安全?

DialogFragment.disease()
是正确的方法。从:

关闭片段及其对话框。如果片段被添加到 后台堆栈,所有后台堆栈状态(包括该条目)将 被爆了。否则,将提交一个新事务以删除 碎片


用于显示对话框片段
dialogFragment.show(transition,FocusDialogFragment.TAG)


用于通过
dialogFragment.disease()取消对话框片段

对于投反对票的人,请至少解释一下,我不知道我的问题有那么明显……谢谢你的回答。关于
disclose()
,我们是否确定总是立即删除对话框?在我的代码中,我必须在调用
super.onSaveInstanceState(savedInstanceState)
之前删除我的
对话框片段。我想100%确定该对话框不会保留在实例中。不确定,但我猜不会。您可以始终使用
dismissAllowingStateLoss()
。好的,我现在接受您的答案,并仅使用
dismise()
进行尝试。如果我发现问题仍未解决,我将在稍后更新问题。