Mam ViewPager, który zawiera kilka TextViews wewnątrz fragmentu, które mają różne rozmiary czcionek. Ponadto mam przyciski do zwiększania/zmniejszania rozmiaru czcionki, które obliczają rozmiar czcionki każdego textView, dodając jego domyślny rozmiar oraz wartość o nazwie STEP (która zmienia się za pomocą klawisza inc/dec size size).
Mój problem polega na tym, że widok jest wyświetlany po raz pierwszy po zastosowaniu zmian wielkości, utworzy tekstowe widoki o żądanym rozmiarze podczas onCreateView() jednak jeśli fragment został już buforowany i nie jest ponownie wywoływanyCreateView, nie wiem jak zaktualizować ich tekst Widoki uwzględniające tylko jeden z zapisanych w pamięci podręcznej fragmentów są wyświetlane na ekranie (i mogę je zaktualizować bez problemu), ale inne nie są wyświetlane (nie wiem, czy są dołączone do działania, czy nie w tym przypadku).
Innymi słowy, w jaki sposób mogę wykryć, które fragmenty są buforowane przez ViewPager i ich już wywołany onCreateView (są to fragmenty, które aktualizują swoje widoki muszą być zastosowane). Zaznaczyłem je w jasnozielonym ze znakami zapytania na zdjęciu poniżej: Android ViewPager: Aktualizuj poza ekranem, ale fragmenty z pamięci podręcznej w ViewPager
Odpowiedz
W celu uzyskania listy buforowanych pozycji przez ViewPager zmieniłem zasilacz których rozszerzenie niestandardowy FragmentStatePagerAdapter:
- Dodaj
HashMap<Integer, FragmentDipsplayPageContent> cachedFragmentHashMap
do mojego adaptera Aktualizacja GetItem() metoda
tak
Aktualizacja destroyItem() z adapterem jak ten
@Override public void destroyItem(ViewGroup container, int position, Object object) { super.destroyItem(container, position, object); //add this line to remove fragments wiped from ViewPager cache cachedFragmentHashMap.remove(position); }
Dodaj getter dostępu do HashMap buforowanych fragmenty działalności:
public HashMap<Integer, FragmentDipsplayPageContent> getCachedFragmentHashMap() { return cachedFragmentHashMap; }
aktualizacji przy użyciu tej kolekcji wewnątrz aktywność:
private void increaseFontSizeForCachedFragments() { HashMap<Integer, FragmentDipsplayPageContent> cachedFragmentsHashMap = adapterViewPager .getCachedFragmentHashMap(); Collection<FragmentDipsplayPageContent> fragmentsCollection = cachedFragmentsHashMap .values(); for (FragmentDipsplayPageContent fragmentDipsplayPageContent : fragmentsCollection) { //update views of fragment fragmentDipsplayPageContent.increasTextFontSize(); } }
W ten sposób aktualizowane są wszystkie fragmenty z pamięci podręcznej, w tym fragmenty widoczne i nieekranowane.
Metoda
public Fragment getItem(int index) {
Fragment fragment = new FragmentDipsplayPageContent();
Bundle args = new Bundle();
args.putInt("INDEX", index);
fragment.setArguments(args);
cachedFragmentHashMap.put(index,fragment);
return fragment;
}
użytkowania FragmentStatePagerAdapter
zamiast FragmentPagerAdapter
dla adaptera ViewPager
Przyjęta odpowiedź jest dobra, ale nie należy buforować wszystkich elementów. Zamiast tego możesz użyć tej metody:
mViewPager.setOffscreenPageLimit(int);
Na przykład istnieje wiele elementów z obrazem i animacjami. Jeśli przechowujesz je wszystkie w pamięci podręcznej, najprawdopodobniej otrzymasz numer OutOfMemoryError
. Aby temu zapobiec, możesz zdefiniować limit strony, który będzie buforowany.
Edytuj: Zamiast HashMap<Integer, Object>
lepiej jest użyć SparseArray<Object>
.
pytanie, w jaki sposób włączyć buforowanie, ale może uzyskać dostęp do pamięci podręcznej dla aktualizacji, gdy nie są one widoczne. – VSB
Jaki jest domyślny rozmiar? – Relm
jeśli używasz tego rozwiązania, jak usunąć ekran w pamięci podręcznej? Mam teraz ten problem, ponieważ strony pamięci podręcznej nie aktualizują się. –
- 1. Fragmenty ViewPager znikają
- 2. Fragmenty w ViewPager zostają odtworzone
- 3. Android - Viewpager i fragmenty, metody nie działają
- 4. Animacja Android ViewPager CrossFade
- 5. Fragmenty ViewPager ulegają zniszczeniu w czasie?
- 6. Android: Viewpager i FragmentStatePageAdapter
- 7. ViewPager zagnieżdżony w ViewPager
- 8. ViewPager zawierający stare fragmenty na rotacji ekranu
- 9. Android Viewholder dla ViewPager
- 10. ActionBarSherlock, ViewPager, TabsAdapter zagnieżdżone Fragmenty kart
- 11. Fragmenty wewnątrz ViewPager znikają po zmianie orientacji
- 12. Odwoływanie się do Fragmenty wewnątrz ViewPager
- 13. Viewpager Wyświetlenie pamięci z widokiem przeglądarki
- 14. Android - Przewijanie ViewPager resetuje
- 15. Android ViewPager Odśwież fragment
- 16. Android -Jak animować viewPager
- 17. Android ViewPager wymiar
- 18. Android animacja viewpager
- 19. Samouczek implementacji TabHost w Androidzie 2.2 + ViewPager i Fragmenty
- 20. android - połączenie horyzontalnego widoku z pionowym viewpager
- 21. Android: Wiele przekąsek w osobnych Fragmentach (ViewPager)
- 22. Android: ograniczaj ładowanie fragmentów za pomocą viewPager
- 23. Android Open Fragment na ViewPager
- 24. Android OpenGL FBO poza ekranem
- 25. Mapy V2 z viewPager
- 26. Wiązanie i odszyfrowywanie usługi Android do/z Fragmentu (w ViewPager)
- 27. CollapsingToolbarLayout z ViewPager
- 28. ViewPager OnItemClickListener
- 29. Android odświeżyć ViewPager wewnątrz fragmentu
- 30. SwipeRefreshLayout inside ViewPager
Obecnie używam FragmentStatePagerAdapter. – VSB
cóż, to zadziałało dla mnie i uratowało mi czas. Dziękuję bardzo! – mohnage7
Klient korzystał z programu stronicującego, tak jak gra ... i ładował dane w sprawiedliwym rozmiarze, więc wisiał po ponad 30 stronach. .. Dzięki za to rozwiązanie. –