从Fragment返回到Activity时按下返回键

3

我的问题是,我有一个活动和一个片段,从活动打开该片段,但当我按返回按钮时,它关闭了应用程序。 我尝试使用以下代码。

用于打开片段的代码。

 case R.id.button_contact:
         Fragment fragment = new FragmentContact();
                FragmentManager fragmentManager =  getSupportFragmentManager();
                fragmentManager.beginTransaction().replace(R.id.frame_container,fragment).addToBackStack("Frag1").commit();
                break;

用于后退按钮。

 @Override
    public void onBackPressed() {
        getSupportFragmentManager().popBackStackImmediate("Frag1",0);
        super.onBackPressed();
    }

注释掉 super.onBackPressed(); - M D
1
删除 getSupportFragmentManager().popBackStackImmediate("Frag1",0); 会更好,因为您已经将片段添加到后退堆栈中,当按下返回按钮时,它将自动从后退堆栈中弹出。 - Sar
4个回答

5

我假设您只是想去掉片段并保持活动不变吗?

在这种情况下,修改您的onBackPressed方法为

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().findFragmentByTag("Frag1") != null) {
        getSupportFragmentManager().popBackStackImmediate("Frag1",0);
    } else {
        super.onBackPressed();
    }
}

如果已添加碎片,则此操作将从活动中移除该碎片;如果未添加,则后退按钮将正常作为销毁活动的操作。


1
只需从onBackPressed()方法中删除此行代码。
  getSupportFragmentManager().popBackStackImmediate("Frag1",0);

它的工作。

1
你可以像这样做。它可以与你的堆栈一起使用。
if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
  super.onBackPressed();
} else {
  getSupportFragmentManager().popBackStack();
}

如果存在任何片段,此代码将弹出堆栈。否则,返回按钮将关闭活动。

1
这两行代码在做什么:

What these two lines are doing:

1). getSupportFragmentManager().popBackStackImmediate("Frag1",0);
    As you are adding you fragment in activity backstack, so when you are calling on back press,
    it remove fragment from stack, now in your stack activity is left, means stack size is one.

2). super.onBackPressed();
I think you  are aware of calling super.onbackpress funcionality, here it will finish
 your activity and stack size is 0 now, and app will close immidately if stack size is 0.

所以你需要移除super.onbackpress()方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接