我有一个带导航抽屉的应用程序。当我启动应用程序时,我在主屏幕(屏幕A)上的内容是“hello world”然后当我从导航抽屉中选择一个项目时,我加载一个片段并获得“新的hello world”然后当我选择一个时导航抽屉中的项目,我加载一个片段并获得“你好宇宙”。但由于这一切都是通过单个片段发生的,当我按下设备后退按钮时,我应该得到如下所示的上一个片段:
“hello universe”>按回> “新的你好世界”>按下> “你好世界”
我该如何处理?
注:的
在更改我试过的片段时
fragmentManager.beginTransaction().replace(R.id.mainContent, fragment).commit();
然后我改为:
fragmentManager.beginTransaction().add(R.id.mainContent, fragment).addToBackStack("tag").commit();
但没有任何效果。该应用程序退出按钮后退出。 这是因为同一个片段一次又一次地被另一个内容取代了吗?
答案 0 :(得分:1)
您尝试的第二种方法是正确的。尝试通过覆盖popBackStack()
方法在BackPressed()
上致电onBackPressed()
。
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else if (getFragmentManager().getBackStackEntryCount() == 0) {
super.onBackPressed();
}
}
答案 1 :(得分:1)
我认为你需要通过调用addToBackStack将片段添加到backstack,如下所示:
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if (fragmentManager.findFragmentByTag("MainFragment") == null) {
fragmentTransaction.add(R.id.content_frame, fragment, "MainFragment");
} else {
fragmentTransaction.replace(R.id.content_frame, fragment, "MainFragment");
fragmentTransaction.addToBackStack("Fragment" + position);
}
fragmentTransaction.commit();
并覆盖OnBackPressed():
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0 ){
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
答案 2 :(得分:0)
使用方法addToBackStack和popBackStack来处理片段的后退按钮这里是样本
ft.replace(R.id.simple_fragment, newFragment);
ft.addToBackStack("tag");
ft.commit();
和后退按钮
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
}