在单个片段中处理后退按钮

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();
    }
}