2012-11-24 18 views
6

Muszę wykonać kod, gdy tylko fragment jest wyświetlany użytkownikowi.Fragmenty Androida: Metoda cyklu życia * zawsze * wywoływana po wyświetleniu fragmentu?

Przeglądając interfejs API, najbliżej widoczną metodą przechwytywania jest onResume. Jednak od debugowania przez mój kod wydaje się, że onResume jest nie wywoływane, gdy użytkownik wybiera przycisk Wstecz, aby powrócić do poprzednio wyświetlanego fragmentu.

Wystarczy, aby wyjaśnić zachowanie widzę:

Mam aktywność "rodzica, który konfiguruje wypustki w ActionBar ... i 2 fragmenty F1 i F2.

Użytkownik wybiera zakładkę i F1 jest ładowane do działania. Po naciśnięciu przycisku użytkownik może przejść do F2. To nie jest osobna zakładka ... F2 jest zamieniany na układ.

Dodanie oświadczenia dziennika, widzę, że gdy użytkownik wybiera przycisk wstecz na F2 dodaje się dzieje ....

1) OnPause() jest wywoływana na F2. 2) F1 jest ładowany do aktywności ... ale onResume() na F1 jest nie nazywa

Brak błędów w dziennikach w tym czasie.

Jakieś pomysły, co robię źle tutaj?

Z góry dziękuję,

Neil.

+0

Powinieneś zawsze publikować swój odpowiedni kod, abyśmy mogli zobaczyć, co się dzieje. Czy dodajesz każdy fragment do tylnego stosu? – Sam

+0

Dzięki Sam. Podczas edytowania mojego pytania i dodawania kodu zauważyłem, że mój błąd występował w moim kodzie zmiany kodu. Dodałem odpowiedź wyjaśniającą. Twoje zdrowie. – Neil

Odpowiedz

9

Ok, wydaje się, ten był błąd pilota. Mój oryginalny kod, aby przełączyć się między fragmentami działalność była ....

public void switchFragment(Fragment newFragment, String tag) { 
    getSupportFragmentManager() 
      .beginTransaction() 
      .add(android.R.id.content, newFragment) 
      .addToBackStack(tag) 
      .commit(); 
} 

Wywołanie add() w powyższym kodzie powinny być rzeczywiście zastąpić(). Wygląda na to, że nie zastępowanie fragmentu w działaniu nie działa z zachowaniem przycisku wstecznego.

Muszę być szczery i przyznać, że nie jestem w 100% pewien, dlaczego tak się dzieje. Jednak po wprowadzeniu zmiany metoda onResume() jest wywoływana w fragmencie docelowym po wywołaniu przycisku wstecz.

+4

, więc powinieneś wznowić moją odpowiedź, ponieważ się spieprzyłeś? Jak miło ... –

+20

Nie mam reputacji, której potrzebuję, by zgodzić. Prawdę mówiąc, wzniosłabym cię, wyłącznie z powodu komediowej wartości błędnej pisowni "RTFM". – Neil

+6

Graj ładnie dzieci. – Sandy

1

To pytanie jest nieparzyste, ponieważ każda istniejąca metoda klasy ma gwarancję, że zostanie wywołana, gdy wystąpi zdarzenie, w którym ta konkretna metoda została zaprojektowana do wywołania i spełnione są wszystkie warunki. Wybierz, które pasuje do zadania, które chcesz osiągnąć najlepiej. Zobacz docs here

enter image description here

+6

To jest trochę dziwna odpowiedź, ponieważ w pośpiechu, aby być mądrym, oczywiście nigdy nie czytasz mojego pytania. I zrobiłem "RTFM" (zakładam, że to właśnie miałeś na myśli) i "podręcznik" mi nie pomógł. Jak wyjaśniłem, nie ma metody cyklu życia, którą widzę, która gwarantuje, że zostanie wywołana, gdy fragment zostanie zwrócony - poprzez naciśnięcie przycisku wstecz. – Neil

+1

który element diagramu zawarty w mojej odpowiedzi jest niejasny? –

+6

Cały diagram jest jasny, ponieważ jest częścią javadoc systemu Android - jednak nie odpowiada na moje pytanie. – Neil

Powiązane problemy