DialogFragment不会被删除

时间:2012-02-10 08:03:40

标签: android android-dialogfragment

我使用此代码

创建一个DialogFragment
Fragment 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版

3 个答案:

答案 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();
      }
   }

我认为这对你有所帮助。