由于我的主要活动使用DialogFragment
,我仍然遇到问题。
我目前正在使用此代码删除它:
FragmentTransaction transaction = getFragmentManager().beginTransaction();
Fragment frag = getFragmentManager().findFragmentByTag("LockDialog");
if(frag != null) {
transaction.remove(frag);
transaction.commit();
}
问题是我仍然因为对话框有重复而导致崩溃(这意味着对话框有时没有被正确删除)。
所以我的问题是:它是删除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();
}
这是目前我的一个应用程序中最大的错误,所以我想在选择其中一个之前确定。
谢谢!
编辑:我刚刚意识到我当前的问题可能是由于提交可能会延迟,我会添加executePendingTransactions
以查看它是否变得更好。
但它还带来了另一个问题,如果对话框被解除,是否有必要调用transaction.remove()?使用dismiss()
比使用交易更直接和安全吗?
答案 0 :(得分:2)
DialogFragment.dismiss()
是正确的方法。来自documentation:
关闭片段及其对话框。如果片段被添加到 返回堆栈,所有后向堆栈状态直到并包括此条目 被弹出。否则,将提交一个新事务以删除 片段。
答案 1 :(得分:0)
您可以使用dialogFragment.show(transition,FocusDialogFragment.TAG);代替
并按dialogFragment.dismiss();