Mam ViewPager podłączonego do FragmentPagerAdapter, który wyświetla trzy fragmenty. ViewPager wydaje się niszczyć widok hostowanego fragmentu, gdy jest więcej niż jedno przesunięcie od bieżącej pozycji.
Wszystkie te widoki są prostymi listami i ta optymalizacja jest całkowicie niepotrzebna, więc chciałbym ją wyłączyć. Powoduje to pewne problemy wizualne, ponieważ listy mają zastosowane animacje układu, a te animacje są odtwarzane po ich zniszczeniu i odtworzeniu. Pokazuje również animację wprowadzającą paska przewijania za każdym razem (gdzie pasek przewijania jest przez chwilę widoczny, aby wskazać, że przewijanie jest możliwe), co może rozpraszać uwagę, a bieżąca pozycja przewijania użytkownika jest tracona w trakcie procesu.
Nie ładuje również trzeciego fragmentu, dopóki nie nastąpi pierwsze przesunięcie, co jest problematyczne, ponieważ każdy fragment obsługuje własne wywołania usługi i wolałbym, aby wszystkie trzy odpalały w tym samym czasie, gdy ładowanie działania. Opóźnienie trzeciego wezwania serwisowego jest mniej niż idealne.
Czy jest jakiś sposób, aby przekonać ViewPagera do zaprzestania tego zachowania i zachowania wszystkich moich fragmentów w pamięci?
Domyślnie ViewPager odtwarza fragmenty podczas przesuwania strony. Aby temu zapobiec, możesz wypróbować jedną z dwóch rzeczy:
1. W onCreate () twoich fragmentów, wywołaj setRetainInstance (true).
2. Jeśli liczba fragmentów jest stała i stosunkowo mała, to w swojej onCreate () dodaj następujący kod:
Jeśli dobrze pamiętam, druga opcja jest bardziej obiecująca. Ale zachęcam do wypróbowania obu i sprawdzenia, które z nich działają.
źródło
„Ustaw liczbę stron, które powinny być zachowywane po obu stronach bieżącej strony w hierarchii widoków w stanie bezczynności. Strony przekraczające ten limit zostaną w razie potrzeby odtworzone z adaptera”.
http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)
źródło