6

Ich habe 3 Fragmente, Frag_A, Frag_B & Frag_C.Die leere Seite wird angezeigt, wenn Sie das Fragment wieder öffnen und das gleiche Fragment erneut ersetzen.

Meine Navigationslogik ist: Frag_A ==> Frag_B ==> Frag_C. Das heißt, Frag_A wird zuerst in das Layout eingefügt, also wird zum ersten Mal Frag_A auf dem Bildschirm angezeigt. Wenn Benutzer dann auf Weiter drückt, wird Frag_A durch Frag_B ersetzt, jetzt wird Frag_B auf dem Bildschirm angezeigt, wenn der Benutzer auf die Schaltfläche Weiter drückt, Frag_B wird durch Frag_C ersetzt, so dass Frag_C auf dem Bildschirm angezeigt wird.

Alles funktioniert gut mit meinem Code an diesem Punkt.

Methode zum nächsten Fragmente zu ändern:

//here, argument 'fragment' is either Frag_B or Frag_C 
public void showFragment(Fragment fragment){ 
    FragmentManager fragMgr = activity.getSupportFragmentManager(); 
    FragmentTransaction fragTrans = fragMgr.beginTransaction(); 

    fragTrans.replace(R.id.frag_placeholder, fragment, fragmentName); 
    fragTrans.addToBackStack(null); 

    int transId = fragTrans.commit(); 
    fragMgr.executePendingTransactions(); 

} 

Layout-Datei der Aktivität (Frag_A zum frag_placeholder hinzugefügt wird, wenn Aktivität beginnt):

<?xml version="1.0" encoding="utf-8"?> 
<merge xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    > 

    <FrameLayout 
     android:id="@+id/frag_placeholder" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     /> 
</merge> 

Aber nach Frag_C gezeigt wird, wenn I pop Frag_C durch Drücken der physikalischen Zurück-Taste und Aufruf der showFragment(Frag_C) Methode, um die Frag_C wieder anzuzeigen, direkt nachdem mein Code die physische Taste gedrückt hat, Ich bekomme eine leere Seite auf dem Bildschirm angezeigt. Warum & wie man es repariert?

================ Erklären =====================

ich sagte, oben „* die Frag_C zeigen wieder direkt nach meinem Code die physische Taste gedrückt wird * erkannt“, hier ist das, was ich meine:

In Aktivität:

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    //I detect the Physical Back button is pressed & invoke the method to show the popped Frag_C again. 
} 
+0

* direkt nachdem mein Code erkannt wurde, wird die physische Taste gedrückt, * - was genau bedeutet das? – Luksprog

+0

Bitte überprüfen Sie meine Erklärung in OP – Mellon

+0

Eine wilde Vermutung ... verwenden Sie die 'showFragment()' Methode mit der gleichen Instanz des Fragments? Auch das erscheint ein bisschen seltsam, der Benutzer entfernt das Fragment nur für Sie, um es erneut zu zeigen. – Luksprog

Antwort

1

Basierend auf @ Luksprog ‚s Kommentar, fand ich dass, wenn ich eine neue Instanz von Frag_C anstelle von immer die sa erstellen Ich Instanz, das leere Seite Problem wird behoben.

+0

Aber das Erstellen neuer Instanz nehmen mehr Speicher. – Arslan

+0

Ich bin auf das gleiche Problem gestoßen, anscheinend ist es bis Oktober 2017 nicht behoben, und ich möchte vermeiden, jedes Mal neue Fragmente zu erstellen. Gehen Sie näher auf Details ein, teilen Sie uns bitte mit, wenn Sie Informationen haben – LPVOID