6

Ho 3 frammenti, Frag_A, Frag_B & Frag_C.Viene visualizzata una pagina vuota quando si inserisce il frammento e lo si sostituisce nuovamente nello stesso frammento

La mia logica di navigazione è: Frag_A ==> Frag_B ==> Frag_C. Quello è Frag_A viene aggiunto al layout in primo luogo, quindi, al primo momento, Frag_A viene visualizzato sullo schermo, quindi, se l'utente preme il pulsante Avanti, Frag_A viene sostituito da Frag_B, ora Frag_B viene visualizzato sullo schermo, se l'utente preme il pulsante Avanti, Frag_B è sostituito da Frag_C, in modo che Frag_C venga visualizzato sullo schermo.

A questo punto tutto funziona correttamente con il mio codice.

metodo per passare alla successiva frammento: file di

//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 di attività (Frag_A viene aggiunto al frag_placeholder all'avvio di attività):

<?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> 

Ma, dopo viene mostrato Frag_C, se I pop Frag_C premendo il pulsante fisico indietro e richiamare il metodo showFragment(Frag_C) per mostrare di nuovo il Frag_C subito dopo che il mio codice ha rilevato che il pulsante fisico è stato premuto, Viene visualizzata una pagina vuota sullo schermo. Perché & come risolverlo?

================ Spiegare =====================

ho detto sopra "* indicare il Frag_C di nuovo subito dopo rilevato il mio codice si preme il pulsante fisico *", ecco quello che voglio dire:

in attività:

@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

* subito dopo che il mio codice ha rilevato che il pulsante fisico è stato premuto, * - cosa significa esattamente? – Luksprog

+0

Si prega di verificare la mia spiegazione in OP – Mellon

+0

Un'ipotesi selvaggia ... si usa il metodo 'showFragment()' con la stessa istanza del frammento? Inoltre sembra un po 'strano, l'utente rimuove il frammento solo per te per mostrarlo di nuovo. – Luksprog

risposta

1

sulla base @ commento Luksprog s', ho trovato che se creo una nuova istanza di Frag_C invece di usare sempre il sa Per esempio, il problema con la pagina bianca viene corretto.

+0

Ma la creazione di una nuova istanza richiede più memoria. – Arslan

+0

Mi sono imbattuto nello stesso problema, apparentemente non è stato risolto fino ad ora ottobre 2017, e voglio evitare di creare nuovi frammenti ogni volta. Esamineremo più nei dettagli, per favore condividi se hai qualche informazione – LPVOID

Problemi correlati