¿Por qué FragmentManager getBackStackEntryCount () devuelve cero?

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

Cuando quiero obtener el cout de la pila por llamada fm.getBackStackEntryCount (), devuelve cero?

Tienes que llamar a un fm.executePendingTransactions() después de ft.commit() o antes de fm.getBackStackEntryCount() . Porque commit () sólo programa las transacciones para un paso posterior.

Tuve un problema similar, en mi caso getFragmentManager (). GetBackStackEntryCount () siempre estaba volviendo cero.

Mi problema es que he utilizado fragmentos de soporte:

 Fragment fragment = new MyFragment(); // note getSupportFragmentManager() instead getFragmentManager() FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.frame, fragment) .addToBackStack(null) .commit(); fragmentManager.executePendingTransactions(); 

Y he comprobado getFragmentManager () backStackEntryCount, que siempre devuelve cero (está utilizando otro gestor de fragmentos):

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

En lugar de getSupportFragmentManager , que devuelve el número correcto:

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

¡Espero eso ayude!

Podría ser demasiado tarde para responder a esta pregunta. Espero que esta respuesta ayude a alguien de todos modos.

En su mayoría depende de donde realmente está llamando a getBackStackEntryCount () método. En mi caso, estaba llamando a este método después de llamar a super.onBackPressed (). En el momento en que se llamó a este método, no había ningún fragmento en la pila trasera. Por eso siempre recibía 0.

Forma correcta de llamar al método en onBackPressed ():

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

Otra solución es usar FragmentManager.OnBackStackChangedListener

 fm.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { Log.d("test", "backStackEntryCount: " + fm.getBackStackEntryCount()); } }); 

Podría ser demasiado tarde para responder a esta pregunta. Espero que esta respuesta ayude a alguien de todos modos.

Debería obtener el método getBackStackEntryCount () en onResume ().

Será esto:

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

¡Buena suerte!

  • Listview conjunto adaptador fragmento nullpointerexception
  • ¿La API de ICS de Android tiene un equivalente nativo a la biblioteca de soporte de ViewPager?
  • MapView se muestra en blanco, pero MapFragments funciona normalmente
  • ScrollView> LinearLayout> PreferenceFragment es altura cero
  • Fragmentos que se superponen entre sí
  • El fragmento que se obtiene de backstack, llama onCreateView () de nuevo
  • Creación de un diseño de cuadro de mandos como fragmento mediante programación
  • Cómo utilizar findViewById en fragmento y ArrayList no se puede aplicar - Android
  • Barra de Acción Sherlock SearchView no se expande al hacer clic
  • Cómo abrir el cajón de navegación en el botón de clic en el fragmento principal?
  • Comprobar fragmento se presenta en framelayout o no en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.