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()
进行尝试。如果我发现问题仍未解决,我将在稍后更新问题。