Warum FragmentManager's getBackStackEntryCount () null zurückgeben?

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(); } 

Wenn ich den Stack Cout per call fm.getBackStackEntryCount () bekommen will, gibt es null zurück?

  • Android Textansicht Umriss Text
  • Kein Platz übrig auf Android Emulator
  • Zbar-Integration in Android-App
  • Wie kann man das Bild eines ImageViews aus einem String setzen?
  • TaskStackBuilder # startActivities () NullPointerException
  • Deaktivieren von Debugger in Android Studio - localhost: 8600 java.net.ConnectException
  • Java.lang.SecurityException bei der Installation apk
  • Android 4.1: Wie man Benachrichtigungen überprüft, ist für die Anwendung deaktiviert?
  • Timezone Problem in Android
  • Android: Neustart Anwendung nach Update - ACTION_PACKAGE_REPLACED
  • Verwenden von BottomBar verhindert das Öffnen von Fragmenten?
  • Android: Gesamte Datenbank löschen
  • 5 Solutions collect form web for “Warum FragmentManager's getBackStackEntryCount () null zurückgeben?”

    Sie müssen eine fm.executePendingTransactions() nach ft.commit() oder vor fm.getBackStackEntryCount() . Da das Commit () nur die Transaktionen für einen späteren Pass plant.

    Ich hatte ein ähnliches Problem, in meinem Fall getFragmentManager (). GetBackStackEntryCount () war immer wieder Null.

    Mein Problem war, dass ich Unterstützungsfragmente benutzt habe:

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

    Und ich überprüfe getFragmentManager () backStackEntryCount, die immer Null zurückgibt (es ist mit einem anderen Fragment-Manager):

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

    Anstelle von getSupportFragmentManager , der die richtige Nummer zurückgibt:

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

    Ich hoffe es hilft!

    Es könnte zu spät sein, diese Frage zu beantworten. Hoffe, diese Antwort wird jemandem irgendwie helfen.

    Meistens hängt es davon ab, wo Sie eigentlich die Methode getBackStackEntryCount () aufrufen. In meinem Fall rief ich diese Methode nach dem Aufruf von super.onBackPressed (). In dem Moment, in dem diese Methode angerufen wurde, gab es kein Fragment im Rückenstapel. Deshalb habe ich immer 0 erhalten.

    Richtige Art, die Methode in onBackPressed aufzurufen ():

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

    Eine andere Lösung ist die Verwendung von FragmentManager.OnBackStackChangedListener

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

    Es könnte zu spät sein, diese Frage zu beantworten. Hoffe, diese Antwort wird jemandem irgendwie helfen.

    Sie solltenBackStackEntryCount () Methode in onResume () erhalten.

    Es wird das sein:

     @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()); } } 

    Viel Glück!

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.