我使用此代码
创建一个DialogFragmentFragment prev = getSupportFragmentManager().findFragmentByTag(DIALOG_SUBMISSIOIN_RESPONSE);
AlertDialogFragment alert = AlertDialogFragment.newInstance(text, getString(R.string.worklog_alert_ok));
alert.show(getSupportFragmentManager(), DIALOG_SUBMISSIOIN_RESPONSE);
其中AlertDialogFragment是一个简单的DialogFragment类,用于创建新的AlertDialog.Builder(..)。
然后我想删除对话框
Fragment prev = getSupportFragmentManager().findFragmentByTag(dialogTag);
if (prev != null) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.remove(prev).commit();
}
Log.d(TAG, "dialog removed " + getSupportFragmentManager().findFragmentByTag(dialogTag) + ", isremoving = " + prev.isRemoving());
但是,在最后一个Log.d消息中,我仍然得到该片段(即getSupportFragmentManager().findFragmentByTag(dialogTag)
不为空,但返回有效片段)。
如何强制立即删除对话框?这对我很重要,因为我有在此函数之后执行的代码,它检查对话框是否存在,然后什么也不做,如果不存在,则重新创建它。但是,它永远不会重新创建它,因为getSupportFragmentManager().findFragmentByTag(dialogTag)
会返回有效的DialogFragment
。
我正在使用Android兼容包,Android 2.2版
答案 0 :(得分:2)
尝试在executePendingTransactions()
后立即致电commit()
。这将强制立即执行事务。调用commit()
仅调度将来发生的事务,因此这可能是您遇到的问题。
答案 1 :(得分:1)
尝试使用transaction.remove(prev).commitAllowingStateLoss()
。
答案 2 :(得分:0)
您可以显示和隐藏您的流程的片段对话框,例如:
public void showLoadingDialog() {
LoadingDialogFragment fragment = (LoadingDialogFragment) getSupportFragmentManager().findFragmentByTag(LoadingDialogFragment.FRAGMENT_TAG);
if (fragment == null) {
fragment = new LoadingDialogFragment();
fragment.setCancelable(false);
getSupportFragmentManager().beginTransaction()
.add(fragment, LoadingDialogFragment.FRAGMENT_TAG)
.commitAllowingStateLoss();
// fragment.show(getSupportFragmentManager().beginTransaction(), LoadingDialogFragment.FRAGMENT_TAG);
}
}
public void hideLoadingDialog() {
LoadingDialogFragment fragment = (LoadingDialogFragment) getSupportFragmentManager().findFragmentByTag(LoadingDialogFragment.FRAGMENT_TAG);
if (fragment != null) {
// fragment.dismissAllowingStateLoss();
getSupportFragmentManager().beginTransaction().remove(fragment).commitAllowingStateLoss();
}
}
我认为这对你有所帮助。