我有一个主要片段(片段A),这是我应用程序的主屏幕。我有一个片段列表(片段B,片段C),当从抽屉中选择时,它会替换片段A.我想将后台堆叠保持在1,这样无论用户在B& B之间导航多少次, C,后退按钮总是将它们带回A.我的代码到目前为止,第一次启动应用程序并访问碎片B / C.
然而,在用户第一次回到片段A后,任何后续替换都会在后台泄漏片段A(即片段B / C重叠在片段A的顶部而不是完全替换它。)同时时间,片段B / C(先选择哪个,总是成为"根片段"这样当我按回时,它停在那个片段然后关闭应用程序而不是回到A。
我被困在导致这种行为的原因上?
我的活动中的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GoogleMapFragment fragment = GoogleMapFragment.newInstance();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_main_container, fragment, fragment.TAG)
.commit();
}
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() != 0) {
getSupportFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
private void replaceFragment(Fragment fragment) {
FragmentManager fm = getSupportFragmentManager();
int count = getSupportFragmentManager().getBackStackEntryCount();
android.support.v4.app.FragmentTransaction txn = fm.beginTransaction();
if (count > 0) {
txn.replace(R.id.fragment_main_container, fragment)
.commit();
}
else {
txn.replace(R.id.fragment_main_container, fragment)
.addToBackStack(backstateName)
.commit();
}
}
onMyEventListener() {
....
case MenuProfileFragment.SHOP:
EmptyStoreFragment fragment1 = EmptyStoreFragment.newInstance();
replaceFragment(fragment1); break;
case MenuProfileFragment.TRANSACTIONS:
OrderListsFragment fragment2 = OrderListsFragment.newInstance();
replaceFragment(fragment2); break;
}