在进入新活动时无法保存第二个片段状态

时间:2016-05-02 11:03:51

标签: android android-fragments

我有2个片段(1,2)。 单击一个按钮(片段1)之后转换(片段2)。如果点击一个按钮,则从(片段2)开始我转到(new_activity)。我的问题是当我从(new_activity)返回时我想去回到(片段2)&然后到(片段1),但它直接转到片段1.我无法将(片段2)添加到addTOBackStack。

// method to handle click event of category
public void onClick(View v) {

    FragmentManager fragmentManager = getActivity()
            .getSupportFragmentManager();
    FragmentTransaction ft = fragmentManager.beginTransaction();

    Bundle bundle = new Bundle();
    int categoryId;
    CategoryFragment a = new CategoryFragment();

    Log.d("HomeFragment", v.getId() + "");

    switch (v.getId()) {
    case R.id.image_american_chiffon:
        categoryId = 1;
        bundle.putInt("categoryId", categoryId);

        a.setArguments(bundle);
        ft.replace(R.id.contentFrame, a);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        ft.addToBackStack(null);

        break;
    case R.id.image_nagma:
        categoryId = 2;
        bundle.putInt("categoryId", categoryId);

        a.setArguments(bundle);
        ft.replace(R.id.contentFrame, a);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        ft.addToBackStack(null);
        break;

    }
    ft.commit();
    Log.e("BACK STACK COUNT",fragmentManager.getBackStackEntryCount()+"");
}

1 个答案:

答案 0 :(得分:0)

每次调用replace方法时,都会创建该片段的新对象。您可以在隐藏状态的开头添加所有需要的片段,然后根据需要显示和隐藏。所以您不需要初始化每次,只需要显示所需的片段并隐藏其他片段。

要在开头添加片段,请执行以下操作:

Fragment myFragment = new CategoryFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.add(R.id.fragmentContainer, myFragment, SOME_TAG);
    transaction.hide(myFragment);
    transaction.commit();

而不是调用replace()方法,只需隐藏并显示所需的片段

FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.show(getFragmentManager().findFragmentByTag(fragmentTagToBeShown));
    transaction.hide(getFragmentManager().findFragmentByTag(currentFragmentTag));
    transaction.commit();