Operacja fragmentacji ma metodę add(Fragment fragment, String tag), która nie umieszcza fragmentu w kontenerze, więc nie może mieć widoku. Do czego można go użyć?W jakiej sytuacji chcemy dodać fragment bez pojemnika?
Odpowiedz
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.
W przypadku okien dialogowych nie ma żadnego kontenera na normalnej warstwie aplikacji. Jest on bezpośrednio dodawany do okna z WindowManager (Zobacz WindowManager.LayoutParams dla różnych typów warstw).
DialogFragment ma takie API jak DialogFragment.html#show(android.app.FragmentManager, java.lang.String), które odpowiada temu.
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.
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.
To samo, napisałem w pytaniu, czyż nie? – Yarh
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):
- 1. Oracle: w jakiej sytuacji używać RAISE_APPLICATION_ERROR?
- 2. błąd Eclipse: Bez pojemnika classpath
- 3. Posiadanie obrazu (bez pojemnika) nierozciągniętego
- 4. Get HTML fragment bez tekstu przez jQuery
- 5. Fragment.isAdded powraca prawdziwe gdy fragment usunięto z pojemnika
- 6. Usuń metodę z FragmentTransaction nie usuwa fragment z pojemnika
- 7. Fragment JAXB Fragment Marszałka bez przestrzeni nazw
- 8. Jak programowo dodać fragment mapy?
- 9. Jak dynamicznie dodać fragment w mojej aktywności?
- 10. Używanie CDI bez pojemnika z serwletem
- 11. Android Fragment, wracając bez odtwarzania/ponownego ładowania Fragment
- 12. Chcemy wypuścić Dropdown SelectedIndexChanged Event in JavaScript
- 13. Jak dodać kolejny fragment do istniejącego fragmentu?
- 14. Jak dodać Fragment Androida do mojej FragmentActivity?
- 15. Clear Android Fragment z powrotem stos bez poppingu?
- 16. Jak mogę dodać div wokół wordpress ul pojemnika
- 17. Jak nagrywać za pomocą AVAudioRecorder bez pojemnika .caf?
- 18. Jak dodać fragment do backstack w MvvmCross 4.0?
- 19. Fragment okna dialogowego bez numeru tytułowego
- 20. magistrali zdarzeń w Fragment
- 21. Używa linq w tej sytuacji overkill
- 22. Co to jest .map() w tej sytuacji?
- 23. Sprawdzanie treści DefaultHttpContext w jednostkowej sytuacji testu
- 24. Jak NIE użytkownik DependencyResolver.Current.GetService (...) w tej sytuacji/
- 25. Jak znaleźć najkrótszą ścieżkę w dynamicznej sytuacji
- 26. Czy w tej sytuacji powinienem używać Drools?
- 27. Dlaczego Task.Delay praca doesn `w tej sytuacji
- 28. Android ListView w Fragment
- 29. Jakiej zależności brakuje w org.springframework.web.bind.annotation.RequestMapping?
- 30. os.walk iteruje w jakiej kolejności?
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
Pytałeś i odpowiedziałeś na własne pytanie w tym samym komentarzu :) ("jak fragment działa w głównym wątku") –
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