6

Mam 3 fragmenty, Frag_A, Frag_B & Frag_C.Pusta strona jest wyświetlana po pobraniu fragmentu i zastąpieniu go ponownie tym samym fragmentem.

Moja logika nawigacji to: Frag_A ==> Frag_B ==> Frag_C. To Frag_A jest dodawane do układu po raz pierwszy, więc po raz pierwszy Frag_A jest wyświetlany na ekranie, a jeśli użytkownik naciśnie przycisk Dalej, Frag_A zostanie zastąpione Frag_B, teraz Frag_B jest pokazane na ekranie, jeśli użytkownik nacisnął przycisk Dalej, Frag_B jest zamieniany na Frag_C, tak że Frag_C pojawia się na ekranie.

Wszystko działa poprawnie z moim kodem w tym momencie.

Metoda zmienić na następny fragment: Plik

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

} 

Układ działalności (Frag_A jest dodawany do frag_placeholder kiedy rozpoczyna aktywny):

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

Ale po Frag_C jest widoczny, jeśli I pop Frag_C przez naciśnięcie fizycznego przycisku Wstecz i wywołanie metody showFragment(Frag_C), aby ponownie wyświetlić Frag_C zaraz po tym, jak mój kod wykrył naciśnięcie przycisku fizycznego, Zostaje wyświetlona pusta strona wyświetlana na ekranie. Dlaczego & jak to naprawić?

================ Wyjaśnić =====================

powiedziałem powyżej „* pokazują Frag_C ponownie zaraz po wykryciu mój kod przycisku fizycznego przycisku *”, tutaj jest to, co mam na myśli:

W działalność:

@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

* zaraz po wykryciu mojego kodu naciśnięto przycisk fizyczny, * - co to dokładnie oznacza? – Luksprog

+0

Proszę sprawdzić moje wyjaśnienie w OP – Mellon

+0

Dzikie domysły ... czy używasz metody 'showFragment()' z tym samym wystąpieniem fragmentu? Poza tym wydaje się to nieco dziwne, użytkownik usuwa fragment tylko po to, aby pokazać go ponownie. – Luksprog

Odpowiedz

1

podstawie @ komentarz Luksprog „s, znalazłem że jeśli utworzę nową instancję nową instancję z Frag_C zamiast zawsze używam sa ja instancja, problem z pustą stroną zostaje naprawiony.

+0

Ale tworzenie nowej instancji zabiera więcej pamięci. – Arslan

+0

Natknąłem się na ten sam problem, najwyraźniej nie został on naprawiony do teraz w październiku 2017 r. I chcę uniknąć tworzenia nowych fragmentów za każdym razem. Zbadamy więcej szczegółów, podziel się, jeśli masz jakieś informacje – LPVOID