【发布时间】:2022-05-04 20:52:35
【问题描述】:
假设我有片段 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");
在此对话框中,单击(正/中/负)按钮后,我想打开 Fragment B,它应该替换 Fragment A。
在Dialog的onClick方法中我运行了一个父Activity的回调方法:
@Override
public void onClick(DialogInterface dialog, int which) {
switch(which) {
case DialogInterface.BUTTON_NEUTRAL:
detailsCallbacks.openMoreDetails();
break;
}
}
最后我的 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();
}
我得到的很奇怪。片段 B 在屏幕上闪烁仅几分之一秒,然后再次被片段 A 替换(覆盖?)。
当我单击“向上”按钮时,我从片段 A 中返回,因此这些交易都没有添加到后台堆栈中。我想显示片段 B,然后在按下“向上”按钮时,返回片段 A。
有可能吗?我的方法有什么问题?
【问题讨论】:
标签: android android-fragments android-dialogfragment