2

我使用此代码创建了一个 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)返回 valid DialogFragment

我正在使用Android兼容包,Android 2.2版

4

3 回答 3

3

尝试executePendingTransactions()之后立即调用commit()。这将强制交易立即执行。调用commit()仅安排将来发生的事务,因此这可能是您遇到的问题。

于 2013-08-20T22:10:02.053 回答
1

尝试使用transaction.remove(prev).commitAllowingStateLoss().

于 2012-03-31T01:25:23.537 回答
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();
      }
   }

我想这会对你有所帮助。

于 2015-04-06T08:47:47.747 回答