3

Ich füge Fragment (Home-Fragment) in Activity.onCreate(), ohne es Backstack hinzufügen, mache ich es mit FragmentTransaction.replace(). Danach füge ich jedes nächste Fragment mit FragmentTransaction.replace() hinzu und füge es dem Backstack hinzu.Fragment ist nicht sichtbar nach Popbackstack

Ich habe eine Funktionalität, die den Backstack löscht, lassen Sie das Fragment sichtbar, um es zu tun, verwende ich FragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);.

Wenn ich nur 1 Fragment zum Backstack hinzufüge und dann das Backstack lösche, funktioniert es gut, aber wenn ich mehr als eins hinzufüge, dann ist nach dem Löschen des Backstacks der Bildschirm leer, obwohl das Home-Fragment onStart() und onResume() empfängt und denke, es ist sichtbar, es erhält nicht onPause(), onStop(), bis ich ein weiteres Fragment hinzufügen oder die App verlassen. Auch wenn ich popBackstack() eins nach dem anderen (auf Benutzeraktion) funktioniert es gut, aber wenn ich popBackstack() in Schleife (alle Fragmente auf einmal knallen) funktioniert es nicht.

Hier ist der Code:

public void changeFragment(BaseFragment fragment, boolean addToBackStack, boolean preventDuplicate) { 
    Fragment topFragment = getSupportFragmentManager().findFragmentById(fragmentContainer.getId()); 
    if (preventDuplicate && topFragment != null && fragment.getClass().equals(topFragment.getClass())) { 
     //Prevent adding same fragment 
     return; 
    } 

    FragmentTransaction transaction = 
      fragmentManager 
        .beginTransaction() 
        .replace(fragmentContainer.getId(), fragment); 

    if (addToBackStack) { 
     transaction.addToBackStack(null); 
    } 

    transaction.commit(); 
} 

public void goToHome() { 
    fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
} 
+0

Try 'fragmentManager.popBackStackImmediate()' –

+0

@KamranAhmed es hat nicht – FullRandom

Antwort

2

neue Support-Bibliothek Version stellte sich heraus, ist in Unordnung Dinge. Nach

Wechsel
compile 'com.android.support:appcompat-v7:25.1.1' 

zurück zu

compile 'com.android.support:appcompat-v7:25.0.1' 

alles funktioniert

+0

nichts ändern, die ich genau das gleiche Problem haben, nicht die Version der Bibliothek zu ändern helfen. Sind Sie sicher, dass Sie nichts in Ihrem Code geändert haben? – 4gus71n

+1

Nicht 100%, aber ich bin mir ziemlich sicher, dass ich nichts anderes geändert habe. – FullRandom

4

Es für FragmentTransaction (hinzugefügt in Version 25.1.0) sehen eine neue Methode: https://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html#setAllowOptimization(boolean).

Versuchen Sie, diese auf der FragmentTransaction Einstellung während:

final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();  
transaction.setAllowOptimization(true); 
transaction.replace(...); 

Das ist für mich das Problem behoben.

Credits: https://stackoverflow.com/a/42597413/5310016

Verwandte Themen