не удается сохранить состояние 2-го фрагмента при переходе к новому действию

у меня есть 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 ответ

  1. При каждом вызове метода 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();