Why Fragmentmanager's Getbackstackentrycount() Return Zero?
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?"