我现在有3个片段。一个是主要片段,第二个是配置文件片段,第三个是配置文件编辑片段。
MainFragment的调用方式如下:
fragmentManager = getSupportFragmentManager();
DashboardFragment fragment1 = new DashboardFragment();
Bundle bundle = new Bundle();
fragment1.setArguments(bundle);
fragmentManager.popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentManager.beginTransaction().replace(R.id.frame, fragment1, "DASHBOARD_FRAGMENT").commitAllowingStateLoss();
现在从主片段我导航到这样的配置文件片段。
fragmentManager = ((MainActivity)(mContext)).getSupportFragmentManager();
ProfileFragment fragment1 = new ProfileFragment();
Bundle bundle = new Bundle();
fragment1.setArguments(bundle);
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentManager.beginTransaction().replace(R.id.frame, fragment1, "PROFILE_FRAGMENT").addToBackStack("B").commit();
现在从配置文件片段我导航到配置文件编辑片段,如下所示:
fragmentManager = getActivity().getSupportFragmentManager();
ProfileEditFragment fragment1 = new ProfileEditFragment();
Bundle bundle = new Bundle();
fragment1.setArguments(bundle);
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentManager.beginTransaction().add(R.id.frame, fragment1, "PROFILE_EDIT_FRAGMENT").addToBackStack("C").commit();
现在导航就像从主片段到配置文件片段,从配置文件片段到配置文件编辑片段。
现在当我从配置文件编辑片段按回来时,它直接转到显示空白的主片段。我想从配置文件编辑片段按下背面的配置文件片段,然后在配置文件片段的背面按下返回主片段。 / p>
为此,我在主要活动中使用了onBackPressed方法,但效果不佳。
@Override
public void onBackPressed() {
// Do nothing if the back button is disabled.
if (!mBackPressCancelled) {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStackImmediate();
}
else {
super.onBackPressed();
}
}
}
出了什么问题?请帮忙。谢谢..
答案 0 :(得分:2)
您还必须将DashboardFragment添加到后台堆栈。
fragmentManager.beginTransaction().replace(R.id.frame, fragment1, "DASHBOARD_FRAGMENT").addToBackStack("A").commitAllowingStateLoss();
另外,更改onBackPressed()
中的if条件。因此,它会在后面的堆栈中保留至少一个片段。
if (getFragmentManager().getBackStackEntryCount() > 1) {
getFragmentManager().popBackStackImmediate();
} else {
super.onBackPressed();
}
此外,请移除popBackStack()
之前的所有replace()
。当你需要在后面的堆栈中保留片段时,不需要这一行。