Projektuję aplikację, która pozwala użytkownikom przechodzić między wieloma stronami w ViewPager. Starałem się dowiedzieć, jak można usunąć instancję Fragment ze strony, gdy nie jest ona już widoczna na ekranie, umieścić ją w pamięci podręcznej (na przykład w HashMap), a następnie przywrócić ją tak, aby użytkownik odwraca się z powrotem na tę stronę, widoki i wszystkie pozostałe elementy będą w tym samym stanie, w jakim były przed usunięciem. Na przykład moja pierwsza strona to ekran logowania, który sprawia, że niektóre elementy układu na tej konkretnej stronie są widoczne/niewidoczne po pomyślnym zalogowaniu. Po przewróceniu dostatecznej liczby stron i cofnięciu do pierwszej strony układ zostanie zresetowany. Staje się to większym problemem dla innej mojej strony, która zawiera ogromną, poziomą/pionową przewijaną siatkę danych, której używam wątku w tle do rysowania, gdy jest inicjowany. Używam okna dialogowego postępu, aby powiadomić użytkownika o postępie ładowania i to staje się naprawdę denerwujące za każdym razem, gdy muszę je załadować.Android: Viewpager i FragmentStatePageAdapter
Więc zrobiłem rozeznanie ...
I przejrza³e¶ kodu źródłowego FragmentStatePageAdapter aw destroyItem() callback, stan instancji Fragment usuwany jest zapisany do ArrayList. Kiedy tworzona jest nowa instancja Fragmentu w wywoływaniu instantiateItem(), jeśli instancja elementu jeszcze nie istnieje (śledzą to przez użycie ArrayList), tworzona jest nowa instancja Fragmentu i jej stan zapisany jest inicjowany odpowiednimi danymi Fragment.SavedState. Niestety, te dane nie uwzględniają stanu, w którym były Widoki, chociaż zauważyłem, że dla stron z GridView/ListView, stan Widowisk został jakoś przywrócony (gdy przewinąłem do jakiejś przypadkowej pozycji, przewróciłem kilka stron i wróciłem , nie zostanie zresetowany).
Według API
Zapisany stan nie może zawierać zależności od innych fragmentów - , która nie może użyć putFragment (Bundle, łańcuch, fragment) do przechowywania odniesienia fragment poznieważ Odniesienie to może nie być poprawne, gdy ten stan zapisany w postaci jest później używany. Podobnie cel Fragment i wynik kodu nie są zawarte w tym stanie.
Będąc noobem Androida, nie jestem pewien, czy rozumiem ostatnie stwierdzenie.
Czy jest tam jakikolwiek sposób buforowania widoku stanu? Jeśli nie, myślę, że po prostu pójdę dalej i pozostawiam w pamięci wszystkie strony fragmentów.
trzeba dziedziczą FragmentStatePagerAdapter, jeśli tylko używać FragmentPagerAdapter następnie onSaveInstanceState nie zostanie wywołana. – Scott