2015-12-14 12 views

Odpowiedz

12

Z Android Dokumentacja:

Jednak fragment nie jest wymagane, aby być częścią układu z działalności; możesz również użyć fragmentu bez własnego interfejsu użytkownika jako niewidzialnego pracownika do działania.

Co z tym celem?

Prosty przykład: Activity rozpoczyna AsyncTask, ale gdy urządzenie obraca activity restartów, powodując AsyncTask tracić połączenie z UI wątek. Ale ten Activity może pomieścić Fragment (niewidoczny, bez interfejsu użytkownika), który może obsłużyć wszystkie prace AsyncTask. Gdy Activity odtwarza system operacyjny Android, ponownie podłącza się do Fragment, w związku z czym nie nastąpi utrata danych.

+0

nie są Handlerami, asynktaskami i usługami, czyżby to nie było w porządku? Lub jest sytuacja, gdy fragment jako pracownik jest lepszy niż którykolwiek z powyższych. Trudno mi to rozgryźć, ponieważ fragment przebiega w głównym wątku – Yarh

+0

Pytałeś i odpowiedziałeś na własne pytanie w tym samym komentarzu :) ("jak fragment działa w głównym wątku") –

+0

Myślę, że może być tam dobrze przykład wykorzystujący cykl życia fragmentu z kombinacją asynktaksu lub "wątku". Ale wydaje się, że taki fragment nigdy się nie zatrzymał i nie wznowiono połączeń – Yarh

2

Jak wspomina @Lucius Hipan, można go użyć do zapobiegania utracie danych. Prawie zawsze ten król fragmentów jest używany jako zatrzymany kontener (setRetainInstance (true) wywołany w metodzie onCreate), a następnie po zmianie konfiguracji urządzenia (np. Zmiana orientacji) fragment nie zostanie odtworzony, ale zapamiętuje poprzedni stan. Zalecany sposób korzystania z asynktaksu. To jest przykład:

Jest aktywność logowania. Użytkownik wprowadza swoje dane uwierzytelniające i naciska przycisk Zaloguj. Po zmianie konfiguracji następuje (użytkownik obraca telefon). Tak więc zadanie sieciowe zostało zakończone, ale twoi trenerzy nie słuchali go teraz. Jeśli wyświetlasz dowolną animację logowania, można ją zapisać za pomocą savedInstance, ale nie słuchać. Zamiast tworzyć usługę możesz po prostu utworzyć nowy zachowany fragment z trwałym asynktaksem i interfejsem do komunikacji z działaniem.

Ta metoda jest dobrym kompromisem dla małych projektów, w których korzystanie z bibliotek magistrali jest przesadzone.

1

za pomocą metody add(Fragment fragment, String tag) wewnętrznie wywołuje add(int containerId, Fragment fragment, String tag) z 0 containerId.That będzie add(0, fragment, tag). Jeśli 0 dostarczany jest containerId, nie będą umieszczane fragmentu w pojemniku.

+0

To samo, napisałem w pytaniu, czyż nie? – Yarh

2

Fragmentów można używać bez interfejsu użytkownika (kontenera) jako narzędzia działającego w tle (jedną zaletą jest to, że można je zachować podczas rotacji itp.) Oraz w celu zachowania danych podczas rotacji i innych zmian.

Czytanie http://developer.android.com/guide/components/fragments.html jest zalecane.

Przykład przykład zachowaniu: https://android.googlesource.com/platform/development/+/master/samples/ApiDemos/src/com/example/android/apis/app/FragmentRetainInstance.java

oto podobne pytania (więc to pytanie wydaje się być powielane, ale nie może być oznaczony z powodu dobroci):

Powiązane problemy