Java 如何从下一个片段导航到最后一个弹出的片段?
我现在有3个碎片。一个是主片段,第二个是概要文件片段,第三个是概要文件编辑片段 MainFragment的名称如下:Java 如何从下一个片段导航到最后一个弹出的片段?,java,android,android-fragments,fragment-backstack,Java,Android,Android Fragments,Fragment Backstack,我现在有3个碎片。一个是主片段,第二个是概要文件片段,第三个是概要文件编辑片段 MainFragment的名称如下: fragmentManager = getSupportFragmentManager(); DashboardFragment fragment1 = new DashboardFragment(); Bundle bundle = new Bundle(); fragment1.setArguments(bundle); fra
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 = 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();
现在,从主片段开始,我将导航到这样的概要片段
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 = 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 = 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();
现在导航就像从主片段到概要文件片段,以及从概要文件片段到概要文件编辑片段
现在,当我从配置文件编辑片段按back键时,它会直接转到显示为空白的主片段。我想转到从配置文件编辑片段按back键的配置文件片段,然后返回到配置文件片段按back键的主片段
为此,我在主要活动中使用了OnBackpress方法,但效果不好
@Override
public void onBackPressed() {
// Do nothing if the back button is disabled.
if (!mBackPressCancelled) {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStackImmediate();
}
else {
super.onBackPressed();
}
}
}
出什么事了?请帮忙。谢谢。您还必须将仪表板片段添加到后堆栈中
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()
。当您需要将片段保留在后堆栈中时,不需要此行。您还必须将仪表板片段添加到后堆栈中
fragmentManager.beginTransaction().replace(R.id.frame, fragment1, "DASHBOARD_FRAGMENT").addToBackStack("A").commitAllowingStateLoss();
if (getFragmentManager().getBackStackEntryCount() > 1) {
getFragmentManager().popBackStackImmediate();
} else {
super.onBackPressed();
}
另外,在onBackPressed()
中更改if条件。因此,它将在后堆栈中保留至少一个片段
if (getFragmentManager().getBackStackEntryCount() > 1) {
getFragmentManager().popBackStackImmediate();
} else {
super.onBackPressed();
}
另外,删除
replace()
之前的所有popBackStack()
。当您需要将片段保留在后堆栈中时,不需要这一行。我仍然要转到主片段,它是空的。我试图添加片段而不是替换,但不起作用。抱歉。我忘了说,在replace()
之前,您需要删除所有popBackStack()
,但我还是要转到主片段,它是空的。我试图添加片段而不是替换,但不起作用。抱歉。我忘了说您需要在replace()之前删除所有popBackStack()
if (getFragmentManager().getBackStackEntryCount() > 1) {
getFragmentManager().popBackStackImmediate();
} else {
super.onBackPressed();
}