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

2023-11-24

由于以下原因,我仍然遇到问题DialogFragment用于我的主要活动。

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

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

if(frag != null) {
    transaction.remove(frag);
    transaction.commit();
}

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

所以我的问题是:这是删除 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();
}

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

Thanks!

EDIT:我刚刚意识到我当前的问题可能是由于提交可能会延迟,我将添加executePendingTransactions看看情况是否会好转。 但它仍然带来了另一个问题,如果对话框已关闭,是否有必要调用 transaction.remove() ?正在使用dismiss()比使用交易更简单、更安全?


DialogFragment.dismiss()是正确的方法。来自文档:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐