2013-08-20 20 views
10

Używam ViewPager, który przechowuje 3 fragmenty, każdy fragment ładuje listę. Problem polega na tym, że aplikacja działa po raz pierwszy i przeskakuję do następnego fragmentu, ten fragment potrzebuje czasem załadować (około 2 sekundy), zanim jego widok będzie widoczny. To bardzo dziwne zachowanie. Wszystko czego chcę, to po uruchomieniu aplikacji, wszystkie fragmenty w ViewPager powinny być gotowe dla użytkownika, więc przesuwając fragmenty, nie ma czasu oczekiwania. Jak mogę to zrobić?Wstępne ładowanie fragmentu widoku w ViewPager przy pierwszym uruchomieniu

+0

Używasz FragmentPageAdapter lub FragmentStatePageAdapter? – Delyan

+0

Co można rozważyć, to buforowanie adapterów list fragmentów w działaniu (lub w pagera). Zapobiegnie to ponownemu załadowaniu adapterów przy każdej zmianie strony. – AedonEtLIRA

+0

@Delyan Używam FragmentPagerAdapter –

Odpowiedz

28

Po prostu wywołaj setOffscreenPageLimit() w onCreate() (po zainicjowaniu ViewPager). OffscreenPageLimit określa liczbę stron, które powinny zostać zachowane po obu stronach bieżącej strony (w twoim przypadku 2). Dzięki temu wszystkie twoje fragmenty zostaną utworzone.

(An inne (zaleca) możliwość to zwiększyć wydajność swoich list lub listadapters, ponieważ czas ładowania 2 sekundy nie brzmi dobrze)

+0

Właściwie ustawienie "2" zapewniłoby zachowanie wszystkich 3 fragmentów. Ta wartość określa liczbę stron, które powinny zostać zachowane na ** z obu stron bieżącej strony **, a nie na całkowitą liczbę stron. –

+0

Tak, wiem. Ale możesz również ustawić limit na "100" i nadal działa ;-) To był tylko przykład, oczywiście, że może ustawić limit na "2", jeśli chce. – Namenlos

+1

Cóż, w takim razie dlaczego mówimy * "w twoim przypadku ** 3 **" * w twojej odpowiedzi? To nie jest poprawne, a to sygnalizuje mi, że nie wiesz, i dlatego pierwotnie dodałem komentarz, aby to wskazać. –

Powiązane problemy