在单个片段中处理后退按钮
handle back button in single fragment
我有一个带导航抽屉的应用程序。当我启动应用程序时,我在主屏幕(屏幕 A)上看到的是 "hello world" 然后当我从导航抽屉中 select 一个项目时,我加载一个片段并得到 "new hello world" 然后再次当我 select 导航抽屉中的一个项目时,我加载一个片段并得到 "hello universe"。但由于这一切都是通过 1 个片段发生的,当我按下设备后退按钮时,我应该得到如下的前一个片段:
"hello universe" >按回> "new hello world" >按回> "hello world"
我该如何处理?
注意:
在更改我尝试过的片段时
fragmentManager.beginTransaction().replace(R.id.mainContent, fragment).commit();
然后我改为:
fragmentManager.beginTransaction().add(R.id.mainContent, fragment).addToBackStack("tag").commit();
但没有任何效果。应用程序在按下后退按钮时退出。
是不是同一个片段一次又一次被另一个内容替换?
您尝试的第二种方法是 correct.Try 通过覆盖 onBackPressed()
方法在 BackPressed()
上调用 popBackStack()
。
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else if (getFragmentManager().getBackStackEntryCount() == 0) {
super.onBackPressed();
}
}
使用方法 addToBackStack 和 popBackStack 来处理片段的后退按钮,这里是示例
ft.replace(R.id.simple_fragment, newFragment);
ft.addToBackStack("tag");
ft.commit();
和后退按钮
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
}
我认为您需要通过调用 addToBackStack 将片段添加到后台堆栈,如下所示:
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();
}
}
我有一个带导航抽屉的应用程序。当我启动应用程序时,我在主屏幕(屏幕 A)上看到的是 "hello world" 然后当我从导航抽屉中 select 一个项目时,我加载一个片段并得到 "new hello world" 然后再次当我 select 导航抽屉中的一个项目时,我加载一个片段并得到 "hello universe"。但由于这一切都是通过 1 个片段发生的,当我按下设备后退按钮时,我应该得到如下的前一个片段:
"hello universe" >按回> "new hello world" >按回> "hello world"
我该如何处理?
注意:
在更改我尝试过的片段时
fragmentManager.beginTransaction().replace(R.id.mainContent, fragment).commit();
然后我改为:
fragmentManager.beginTransaction().add(R.id.mainContent, fragment).addToBackStack("tag").commit();
但没有任何效果。应用程序在按下后退按钮时退出。 是不是同一个片段一次又一次被另一个内容替换?
您尝试的第二种方法是 correct.Try 通过覆盖 onBackPressed()
方法在 BackPressed()
上调用 popBackStack()
。
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else if (getFragmentManager().getBackStackEntryCount() == 0) {
super.onBackPressed();
}
}
使用方法 addToBackStack 和 popBackStack 来处理片段的后退按钮,这里是示例
ft.replace(R.id.simple_fragment, newFragment);
ft.addToBackStack("tag");
ft.commit();
和后退按钮
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
}
我认为您需要通过调用 addToBackStack 将片段添加到后台堆栈,如下所示:
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();
}
}