Skip to content Skip to sidebar Skip to footer

Why Fragmentmanager's Getbackstackentrycount() Return Zero?

private static void changeFragment(Fragment f, boolean init) { FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.info_content, f,f.getClass().getName(

Solution 1:

You have to call a fm.executePendingTransactions() after ft.commit() or before fm.getBackStackEntryCount(). Because the commit() only schedules the transactions for a later pass.

Solution 2:

I had a similar problem, in my case getFragmentManager().getBackStackEntryCount() was always returning zero.

My problem was I've using support fragments:

Fragmentfragment=newMyFragment();
// note getSupportFragmentManager() instead getFragmentManager()FragmentManagerfragmentManager= getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame, fragment)
.addToBackStack(null)
.commit();

fragmentManager.executePendingTransactions();

and I've checking getFragmentManager() backStackEntryCount, which always returns zero (it's using another fragment manager):

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

instead of getSupportFragmentManager, which returns the correct number:

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

Hope it helps!

Solution 3:

It might be too late to answer this question. Hope this answer will help someone anyway.

Mostly it depends on where you are actually calling getBackStackEntryCount() method. In my case, I was calling this method after calling super.onBackPressed(). The moment this method was got called, there was no fragment in back stack. That's why I was always receiving 0.

Right way of calling the method in onBackPressed() :

@OverridepublicvoidonBackPressed() {
    try {
        intbackStackEntryCount= getSupportFragmentManager().getBackStackEntryCount();
        Log.d("class", "items in backstack " + backStackEntryCount);
    } catch (Exception e) {
        e.printStackTrace();
    }
    super.onBackPressed();
}

Solution 4:

Another solution is using FragmentManager.OnBackStackChangedListener

fm.addOnBackStackChangedListener(newFragmentManager.OnBackStackChangedListener() {
        @OverridepublicvoidonBackStackChanged() {
            Log.d("test", "backStackEntryCount: " + fm.getBackStackEntryCount());
        }
});

Solution 5:

It might be too late to answer this question. Hope this answer will help someone anyway.

You should getBackStackEntryCount() method in onResume().

It will be this:

@OverrideprotectedvoidonResume() {
    super.onResume();
    Log.i(TAG, "onResume: " + fragmentManager.getBackStackEntryCount());
    for (intentry=0; entry < fragmentManager.getBackStackEntryCount(); entry++) {
        Log.i(TAG, "Found fragment: " + fragmentManager.getBackStackEntryAt(entry).getId());
    }
}

Good luck!

Post a Comment for "Why Fragmentmanager's Getbackstackentrycount() Return Zero?"