2013-07-10 9 views
14

Widziałem ten post ale rozwiązania zamieszczone tutaj nie pracują dla mnie: get the latest fragment in backstackUzyskaj ostatni fragment w tylnej stosu

Kiedy zastąpić fragment dla innej używam:

FragmentManager manager = getSupportFragmentManager(); 
    FragmentTransaction ft = manager.beginTransaction(); 

    ft.replace(android.R.id.tabcontent, fragment, tag); 
    ft.addToBackStack(null); 

    ft.commit(); 

Więc, proszę zauważyć, że używam znaczników do wykrywania dowolnego fragmentu.

Mój problem jest w szczególności następujące elementy:

Załóżmy, że mam fragment_A, fragment_B i fragment_C. Mogę dostać się do fragmentu C z fragmentu A lub fragmentu B iw zależności od rodzica wezwania muszę zrobić coś konkretnego. Więc znowu potrzebuję odzyskać ostatnią FRAGMENT w tylnym stosie.

Kiedy próbuję zrobić:

FragmentManager fm = getSupportFragmentManager(); 

     for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){ 
      String ide = fm.getBackStackEntryAt(entry).getName(); 
      Log.i("TAG", "Found fragment: " + ide); 
     } 

otrzymuję wartości null. Jeśli używam getId() zamiast, mam numery więc próbowałem robić:

int id = fm.getBackStackEntryAt(entry).getId(); 
Fragment fragment = fm.findFragmentById(id); 
Log.i("TAG", "Found fragment: " + fragment.getTag()); 

Ale otrzymuję null .. nie wiem co robić, więc każda pomoc będzie mile widziane.

Edit: Ja nazywam to metody w onBackPressed() {...}

Odpowiedz

16

Jeśli używasz BackStackEntry.getName(), powinno być:

ft.replace(android.R.id.tabcontent, fragment, tag); 
ft.addToBackStack(tag); 
+0

masz rację, że to właśnie ja brakujący. Dzięki! – kiduxa

+0

Zła praktyka używania tego samego znacznika dla fragmentu, który powinien zostać dodany lub zastąpiony. a backstack, który faktycznie powinien być nazwą poprzedniego fragmentu, aby zapamiętać transakcję, jest powiązany z tym fragmentem. –

Powiązane problemy