0

I have two Fragments - FragmentA and FragmentB.

I try to show FragmentB from FragmentA.

    FragmentB fragmentB = new FragmentB();

    MainActivity activity = (MainActivity) getActivity();
    int fragmentContainer = activity.getFragmentContainer();

    FragmentTransaction fragmentTransaction = activity.getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(fragmentContainer, fragmentB);
    fragmentTransaction.addToBackStack(null);

    fragmentTransaction.commit();

MainActivity

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        fragmentA = new FragmentA(getSupportFragmentManager());
        //...

        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.add(FRAGMENT_CONTAINER,fragmentA);
        fragmentTransaction.commit();
    }

FragmentB is showed, but when i click on back button i have a next situation - FragmentB was dismissed, but FragmentA not showed.

Why this happens and what i need to edit to get a correct result?

Sergey Shustikov
  • 15,377
  • 12
  • 67
  • 119

2 Answers2

0
getActivity().getChildFragmentManager().beginTransaction();

use this it may be works inside fragmentB

wadali
  • 2,221
  • 1
  • 20
  • 38
0

Thanks to New Developer for provided link.

All that we need it's just add a

@Override
public void onBackPressed(){
  if (getSupportFragmentManager().getBackStackEntryCount() == 1){
    finish();
  }
  else {
    super.onBackPressed();
  }
}

and

private void replaceFragment (Fragment fragment){
  String backStateName =  fragment.getClass().getName();
  String fragmentTag = backStateName;

  FragmentManager manager = getSupportFragmentManager();
  boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0);

  if (!fragmentPopped && manager.findFragmentByTag(fragmentTag) == null){ //fragment not in back stack, create it.
    FragmentTransaction ft = manager.beginTransaction();
    ft.replace(R.id.content_frame, fragment, fragmentTag);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.addToBackStack(backStateName);
    ft.commit();
  } 
}

and manage fragments in activity.

So if we need a swap fragments just call :

replaceFragment(new MySwappingFragment());
Community
  • 1
  • 1
Sergey Shustikov
  • 15,377
  • 12
  • 67
  • 119