¿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?
- Adición de un fragmento a un grupo de vistas
- Utilizar la misma clase de Fragmento dos veces en diferentes contenedores
- Android: Viewpager y FragmentStatePageAdapter
- El fragmento del explorador de código de barras de Zxing se bloquea después de unos minutos
- Los valores de EditText en Android Fragment no se actualizan
- Botón Haga clic dentro del fragmento para abrir un nuevo fragmento
- ¿Cómo iniciar la transición de elementos compartidos usando Fragmentos?
- Unidad probar un fragmento de Android
- Cómo evitar llamar a onCreateView cuando el botón de nuevo presionado en el fragmento en android
- Cómo utilizar el fragmento con Viewpager para páginas de desplazamiento
- ListView dentro de un fragmento utilizado en un ViewPager no se comporta como se esperaba
- Cómo reemplazar LongPress en ListFragment?
- Android Spinner Dropdown flecha que no se muestra
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!
- Código de error desconocido durante la instalación de la aplicación "-505"
- Cámara abierta de Android del botón