Muhammad Husnain Tahir
Muhammad Husnain Tahir

Reputation: 1039

Keep Android Fragments in Backstack

I'm working on android fragments and i am unable to keep the fragments in backstack i-e when i press back button it pushes me out of the Activity which starts fragments, i want to go back to previous fragment on backpress.

So far i have tried this but i am unable to keep the fragments in backstack.

getActivity().getFragmentManager().beginTransaction()
             .replace(R.id.mainContainer, searchResultsFragment)
             .addToBackStack(null)
             .commit();

Upvotes: 4

Views: 2378

Answers (3)

reza_khalafi
reza_khalafi

Reputation: 6544

I just remove this line:

.addToBackStack(null)

And works for me.

Upvotes: 0

Mina Fawzy
Mina Fawzy

Reputation: 21452

before you call commit() to commit transaction, you should add fragment to backstack addToBackStack(null) as you did in your provided code

then override onBackPressed() to pop fragment from stack

the issue you facing , you make your transaction with FragmentManager

getActivity().getFragmentManager().beginTransaction()
             .replace(R.id.mainContainer, searchResultsFragment)
             .addToBackStack(null)
             .commit();

but you in onBackPressed() you using SupportFragmentManager

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

to fix your issue , you must know what you match your fragment type (in your case searchResultsFragment) I mean if its extend Fragment or support Fragment

in case you extend fragment support

import android.support.v4.app.Fragment;

you should use getSupportFragmentManager() in both transaction and onBackPressed

in case you use fragment

import android.app.Fragment;

you should use getFragmentManager() in both transaction and onBackPressed

Upvotes: 6

Sebastian
Sebastian

Reputation: 182

You have to overwrite onBackPressed in your activity. It is not enough only adding the fragment to back stack.

@Override
public void onBackPressed() {
    FragmentManager fragmentManager = getSupportFragmentManager();
    if(fragmentManager.getBackStackEntryCount() != 0) {
        fragmentManager.popBackStack();
    } else {
        super.onBackPressed();
    }
}

Upvotes: 3

Related Questions