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

时间:2014-05-31 06:19:53

标签: android android-dialogfragment

由于我的主要活动使用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()比使用交易更直接和安全吗?

2 个答案:

答案 0 :(得分:2)

DialogFragment.dismiss()是正确的方法。来自documentation

  

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

答案 1 :(得分:0)

您可以使用dialogFragment.show(transition,FocusDialogFragment.TAG);代替

并按dialogFragment.dismiss();

解雇