2012-04-05 13 views
9

Staramy się stworzyć aplikację dla systemu Android opartą na ViewPager, która będzie otrzymywać podczas wykonywania instrukcji do dodawania i usuwania stron. Niemal jak w przypadku przeglądarki z zakładkami, możesz usunąć bieżącą kartę lub usunąć określoną kartę.Zniszcz strony na ViewPager i FragmentStatePagerAdapter

W następnej dokumentacji Google używamy FragmentStatePagerAdapter, który jest przeznaczony do użycia w sytuacjach, gdy występuje duża liczba stron, działając bardziej jak widok listy.

Ale gdy staramy się: - Usunąć stronę, która nie jest wyświetlane na ekranie - i utworzyć nowy fragment obiektu z tej samej klasy - i na tej samej pozycji strony usuniętego Zauważyliśmy, że na Androida platforma odzyskuje martwą stronę i wyświetla ją użytkownikowi. Nowy obiekt, który właśnie stworzyliśmy, po prostu nie uruchamia "onCreate", "onCreateView" lub "onActivityCreated".

Szukamy sposobów rozwiązania tego problemu, zmuszając platformę do korzystania z naszego nowego obiektu fragmentu z tej samej klasy. Jakieś pomysły?

Dowiedzieliśmy się, że jeśli zniszczymy bieżącą stronę, platforma rzeczywiście zniszczyła stronę i utworzyła nowy obiekt z tej samej klasy. Oto mały przykład replikowania problemu i tego zachowania.

Źródło: http://dl.dropbox.com/u/8333012/SimpleAdapter/SimplePager.zip

wideo: http://www.youtube.com/watch?v=-oaXXwU8PSI&hd=1

Od projektu po dotknięciu TextView na pierwszej stronie został zaprojektowany, aby usunąć drugą stronę (co jest zielony) do nowego niebieskiej stronie. Zobaczysz, że nawet robiąc to z pierwszej strony, druga strona pozostaje zielona. Ale gdy naciśniesz przycisk Wstecz Androida na drugiej stronie (zielony) i dotkniesz TextView, druga strona będzie miała odpowiedni niebieski kolor.

Odpowiedz

13

Kiedy masz do czynienia z ListView i zmieniasz podstawowe dane karty, zadzwoń pod numer notifyDataSetChanged() i każdy widok odzwierciedlający zestaw danych zostanie odświeżony. To jest sposób, w jaki powinieneś pójść z adapterem pager fragmentu.

W twoim przypadku nie powiadamiasz adaptera. Jednak w przypadku FragmentPagerAdapter/FragmentStatePagerAdapter nie ma to znaczenia, ponieważ te adaptery domyślnie ignorują notifyDataSetChanged(). Aby to działało przesłonić getItemPosition() w swojej implementacji adaptera

@Override 
public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

A jak już wspomniano, po dodaniu/usunąć fragmenty nazwać (w showOtherPage())

mAdapter.notifyDataSetChanged(); 
+1

Dziękuję, ale jako efekt uboczny Skuteczność zmiany stron znacznie się zmniejszyła. Jak 2 sekundy na zmianę stron w Galaxy Tab 10'1 (wydarzenie Google I/O). Przed twoją sugestią była natychmiastowa. –

+0

Dzięki, oszczędzasz mój czas! – ihrupin

Powiązane problemy