我的场景: Activity 1 由 fragment A-> B-> C 组成。所有 fragment 都使用以下代码添加:
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.content, fragment, TAG);
ft.addToBackStack(TAG);
ft.commit();
现在,我想从 fragment C 直接返回 fragment A。因此,我在添加 fragment C 时注释了 ft.addToBackStack(TAG)
。所以当我从 C 按下返回按钮时直接在屏幕上获取Fragment A。
但是,Fragment C 并没有被 A 取代。事实上,这两个 Fragment 都是可见的。我该如何解决这个问题?
最佳答案
您需要做两件事 - 从 A->B 命名 FragmentTransaction,然后在您的包含 Activity 中覆盖 onBackPressed() 以调用 FragmentManager#popBackStack (String name, int flags)当您在 fragment C 上时。示例:
从 A->B 过渡
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.container, new FragmentB(), "FragmentB")
.addToBackStack("A_B_TAG")
.commit();
从 B->C 的转换将使用类似的交易,其标签为“FragmentC”。
然后在你包含的Activity中重写onBackPressed():
@Override
public void onBackPressed() {
if (getSupportFragmentManager().findFragmentByTag("FragmentC") != null) {
// I'm viewing Fragment C
getSupportFragmentManager().popBackStack("A_B_TAG",
FragmentManager.POP_BACK_STACK_INCLUSIVE);
} else {
super.onBackPressed();
}
}
关于android - 按下后退按钮时如何用 fragment A替换 fragment C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13984871/