从DialogFragment打开片段(替换Dialogs父对象)

Mar*_*Bro 5 android android-fragments android-dialogfragment

假设我有片段A,从中打开DialogFragment像这样的片段:

FragmentActivity fragmentActivity = (FragmentActivity) view.getContext();
FragmentTransaction ft = fragmentActivity.getSupportFragmentManager().beginTransaction();
Fragment prev = fragmentActivity.getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
  ft.remove(prev);
}
ft.addToBackStack(null);
DialogFragment fragmentDialog = MyDialogFragment.newInstance();
fragmentDialog.show(ft, "dialog");
Run Code Online (Sandbox Code Playgroud)

在此对话框中,单击(正/中性/负)按钮后,我要打开片段B,该片段应替换片段A。

在对话框的onClick方法中,我运行父活动的回调方法:

@Override
public void onClick(DialogInterface dialog, int which) {
  switch(which) {
    case DialogInterface.BUTTON_NEUTRAL:
      detailsCallbacks.openMoreDetails(); 
      break;
  }
}
Run Code Online (Sandbox Code Playgroud)

最后,我的Activity的openMoreDetails()方法如下所示:

@Override
public void openMoreDetails() {
  Fragment fragmentB = Fragment.newInstance();
  FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
  ft.replace(R.id.fragment_container, fragmentB);
  ft.addToBackStack(null);
  ft.commit();
}
Run Code Online (Sandbox Code Playgroud)

我得到的是奇怪的。片段B在屏幕上闪烁仅几分之一秒,然后再次被片段A替换(覆盖?)。

当我单击向上按钮时,我什至从片段A取回,因此这些事务中的任何一个都未添加到后台堆栈中。我想显示片段B,然后按向上按钮回到片段A。

有可能吗?我的方法有什么问题?

ezc*_*ing 0

您不应该从 FragmentA 打开对话框。实现从 FragmentA 到您的 Activity 的回调,并让该 Activity 处理所有片段事务。