在backstack上的Android单片段

时间:2015-02-23 23:16:25

标签: android android-fragments back-stack

我有一个主要片段(片段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;
}

0 个答案:

没有答案