Fragment PopBackStack Fragment PopBackStack android android

Fragment PopBackStack


You should not add your first fragment to the backstack, as pressing the return key will just reverse the action you did. So if you replace a fragment and you press back, it will reverse the replace you did. But if you press back on an '.add()' fragmenttransaction, it will simply remove it and show you a blank page. So i think removing the first fragment from the backstack should do the trick. Try it out and let me know!

@Override    protected void onCreate(Bundle savedBundleState) {        super.onCreate(savedBundleState);        setContentView(R.layout.activity_base_new);        Fragement_Home home = new Fragement_Home();        FragmentManager manager = getSupportFragmentManager();        manager.beginTransaction().add(R.id.frameContent, home).commit();    }

EXAMPLE:

So let's say you have two fragments called A & B

If you .add() fragment A to the page, and "addToBackStack()" ( = save reverse of the action ) you will have saved the REMOVE fragment A as action when you click on back.

If you .replace() fragment A by fragment B, and also "addToBackStack()" you will have saved the remove B and add A as action when you click on back.

So you see why it's not good practice to add your first fragmenttransaction to the backstack? It will just result in removing fragment A by pressing back, resulting in a blank page. Hope this is enough info.

Also, once you have removed the addToBackStack() to your first fragment, you don't need to override onBackPressed() because it will work how it is supposed to. It will just finish the activity when there is nothing left in the backstack without showing you that blank page first.


Your line:

if(fm.getBackStackEntryCount() > 1){

should be:

if (fm.getBackStackEntryCount() > 0) {

You are putting 3 fragments on the backstack. After you pop the first two entries off, the count of entries on the backstack then equals 1. So you prevent yourself from retrieving the first fragment you added to the backstack.


You are using this

manager.beginTransaction().add(R.id.frameContent, home).addToBackStack("home").commit();

try to use this instead

manager.beginTransaction().replace(R.id.frameContent, home).addToBackStack("home").commit();

Let me know if it works for you.