如何从下一个片段导航到最后弹出的片段?
How to navigate to last popped up fragment from next fragment?
我现在有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();
现在的导航类似于从主片段到个人资料片段以及从个人资料片段到个人资料编辑片段。
现在,当我从个人资料编辑片段中按回时,它会直接转到主要片段,这表明 blank.I 想要在从个人资料编辑片段中按回去时转到个人资料片段,然后在向后按时返回到主要片段简介片段。
为此,我在 main activity 中使用了 onBackPressed 方法,但效果不佳。
@Override
public void onBackPressed() {
// Do nothing if the back button is disabled.
if (!mBackPressCancelled) {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStackImmediate();
}
else {
super.onBackPressed();
}
}
}
出了什么问题?请帮忙。谢谢..
您还必须将 DashboardFragment 添加到返回堆栈。
fragmentManager.beginTransaction().replace(R.id.frame, fragment1, "DASHBOARD_FRAGMENT").addToBackStack("A").commitAllowingStateLoss();
此外,更改 onBackPressed()
中的 if 条件。因此,它会在您的后台堆栈中保留至少一个片段。
if (getFragmentManager().getBackStackEntryCount() > 1) {
getFragmentManager().popBackStackImmediate();
} else {
super.onBackPressed();
}
此外,删除 replace()
之前的所有 popBackStack()
。当您需要将片段保留在后台堆栈中时,不需要此行。
我现在有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();
现在的导航类似于从主片段到个人资料片段以及从个人资料片段到个人资料编辑片段。
现在,当我从个人资料编辑片段中按回时,它会直接转到主要片段,这表明 blank.I 想要在从个人资料编辑片段中按回去时转到个人资料片段,然后在向后按时返回到主要片段简介片段。
为此,我在 main activity 中使用了 onBackPressed 方法,但效果不佳。
@Override
public void onBackPressed() {
// Do nothing if the back button is disabled.
if (!mBackPressCancelled) {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStackImmediate();
}
else {
super.onBackPressed();
}
}
}
出了什么问题?请帮忙。谢谢..
您还必须将 DashboardFragment 添加到返回堆栈。
fragmentManager.beginTransaction().replace(R.id.frame, fragment1, "DASHBOARD_FRAGMENT").addToBackStack("A").commitAllowingStateLoss();
此外,更改 onBackPressed()
中的 if 条件。因此,它会在您的后台堆栈中保留至少一个片段。
if (getFragmentManager().getBackStackEntryCount() > 1) {
getFragmentManager().popBackStackImmediate();
} else {
super.onBackPressed();
}
此外,删除 replace()
之前的所有 popBackStack()
。当您需要将片段保留在后台堆栈中时,不需要此行。