从Backstack中删除片段并显示活动

时间:2018-06-11 16:52:07

标签: android android-fragments android-activity

我有一个活动和三个片段,这就是生命周期:

  1. 打开应用(加载活动)
  2. 按下按钮(加载片段A)
  3. 按另一个按钮(加载片段B)
  4. 活动 - >片段A - >片段B

    我想要的是,如果我按片段B 中的后退按钮,它会显示活动

    我该怎么办?

    现在,如果按下后退按钮,它会显示片段A

    修改 这就是我称之为Fragment B的方式

     public void changeFragment(Fragment fragment, boolean addToBackStack) {
    
        if (fragment != null) {
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.addToBackStack(null);
            ft.replace(R.id.content_frame, fragment);
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            ft.commit();
        }
    

2 个答案:

答案 0 :(得分:2)

您正在使用add()中的FragmentTransaction在片段A顶部添加片段B.如果您改为使用replace(),则片段A将替换为片段B,而不是将其添加到backstack中,这样当您在片段B中按回时,将显示Activity而不是片段A. Check { {3}}有关如何替换片段的更多详细信息。

答案 1 :(得分:1)

过了一段时间,我的解决方案是在活动中使用onBackPressed:

@Override
public void onBackPressed() {

    FragmentManager fm = this.getSupportFragmentManager();
    if (getSupportFragmentManager().getBackStackEntryCount() > 0 ){
        for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
            fm.popBackStack();
        }
    } else {
        super.onBackPressed();
    }


}