Search code examples
androidbackonbackpressed

How go back from Fragment A to Fragment B?


I need to go from FragmentA to FragmentB (i'm using navigationdrawer)

I create this method in FragmentB:

public void onBackPressed(){
    FragmentManager fm = getActivity().getFragmentManager();
    fm.popBackStackImmediate();
}

but they don't work, how can i implement this method?


Solution

  • When you add your fragment, you also have to add it to your fragment's backstack.

    FragmentTransaction ft = getSupportFragmentManager.beginTransaction();
                      ft.replace(R.id.content, fragment, backStateName);
                      ft.addToBackStack(backStateName);
                      ft.commit();
    

    (here R.id.content is your fragment container in your activity)

    Then you have to override onBackPressed method in your activity that contains your fragments.

    @Override
    public void onBackPressed() {
     if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
                     getSupportFragmentManager().popBackStack();
      }
    }
    

    if you want to customize your onBackPressed then you can check for your currently visible fragment in your activity and create a callback for performing action for that particular fragment. example -

        @Override
        public void onBackPressed() {
         if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
                  Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.content);
                  if (fragment instanceof FragmentB) {
                                ((FragmentB) fragment).onBackPressed();
    //                     getSupportFragmentManager().popBackStack();
          }
        }
    

    now you can add getSupportFragmentManager().popBackStack(); in your Fragment's onBackPressed() method.