处理单个片段

时间:2015-05-12 04:21:17

标签: android android-fragments navigation-drawer

我有一个带导航抽屉的应用程序。当我启动应用程序时,我在主屏幕(屏幕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();

但没有任何效果。该应用程序退出按钮后退出。 这是因为同一个片段一次又一次地被另一个内容取代了吗?

3 个答案:

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