2012-07-02 16 views
23

Chciałbym cache widoku fragmentu. Moja aktywność zawiera karty z możliwością przeciągania, a każda karta wywołuje inny fragment. Ale kiedy przechodzę między kartami, przejście wydaje się dość powolne z powodu zniszczenia widoku fragmentu, który jest odbudowywany podczas operacji przesunięcia. Czy ktoś wie, jak mogę buforować widok każdego fragmentu, aby zapobiec temu problemowi? Pracuję z obsługą biblioteki v4 i api 14Sposób buforowania widoku fragmentu

Próbowałem zaimplementować konstruktor dla fragmentów, wywoływanych przez kontener działania fragmentów: wywołuję konstruktor, fragmenty są tworzone jako zmienna klasy aktywności, a następnie za każdym razem, gdy fragment musi się pokazać, klasa aktywności zwraca obiekt fragmentu, który wcześniej stworzyłem, ale to nie poprawia mojej aplikacji, ponieważ widok tego fragmentu jest zniszczony i tak jest

+0

czy próbowałeś buforować widok w samym fragmencie i na onCreateView zwróciłeś buforowany fragment? Czy widok jest zawsze zniszczony? – ffleandro

+0

Czy używasz 'ViewPager' do swoich" przesuwanych kart "? – Evos

+0

Używam przesuwanych kart – Release

Odpowiedz

23

Dzieje się tak dlatego, że domyślnie wewnętrznie pager ładuje maksymalnie 3 strony (fragmenty) w tym czasie: ten wyświetlający, poprzedni i następny, więc jeśli masz 5 fragmentów, stanie się to podczas przejścia od pierwszego do ostatniego: (gdzie x jest załadowanym fragmenem t)

xx000 -> xxx00 -> 0xxx0 -> 00xxx -> 000xx

Spróbuj użyć

myPager.setOffscreenPageLimit(ITEMS_COUNT-1); 

Dzięki temu dowiesz się pager, aby zachować wszystkie te w pamięci i nie niszcz/twórz za każdym machnięciem (dokładnie przyjrzyj się zarządzaniu pamięcią)

+1

Czy to nie wywoła 'onCreateView' fragmentu tabulatora? (Tam, gdzie załadowany jest widok układu fragmentu) – StarDust

+1

@StarDust tak, to wywoła na ViewCreateView wszystkie fragmenty w tym samym czasie na początku.To jest trudne, możesz zabraknąć pamięci lub po prostu dostaniesz czarny ekran lub blok, ponieważ procesu ładowania fragmentów. To rozwiązanie jest miłe, jeśli musisz załadować 4 lub 5 lekkich fragmentów, ale nie zrobiłbym tego dla 10 ciężkich fragmentów. Możesz ustawić offscreenPageLimit na dowolną liczbę mniejszą niż liczba fragmentów, na przykład jeśli masz 10 stron i ustawisz limit na 4 i jesteś na szóstym ekranie, załaduje 2 dodatkowe w obu kierunkach, jak ten 000xx ** x * * xx00 (najlepsze rozwiązanie myślę) – MariusBudin

Powiązane problemy