2012-01-17 15 views
13

Mam nadzieję, że ktoś może mi pomóc z niewielkim problemem/pomieszaniem, jaki mam z Viewpagers i zapisaniem danych.Android Viewpager zapisywanie danych i wyświetleń

PROBLEM:

Podczas przewijania w czterech widoków mam, pierwszy widok ma dwie błystki, dwa TextView które wyświetlają ciąg lub wybranego elementu. jeśli przejdę na trzecią stronę i powrócę na drugą stronę, dane w pierwszym widoku zostaną utracone. hense potrzebujący zapisać dane.

Czy można to zrobić w dwóch opisanych poniżej procedurach? (najlepiej przypuszczać, że tak), jeśli tak, jakie polecenia należy podać?

KOD:

@Override 
public void restoreState(Parcelable arg0, ClassLoader arg1) {  
} 

@Override 
public Parcelable saveState() { 
    return null; 
} 

EXTRA INFO: viewpager jest używany w

public Object instantiateItem(View collection, int position) { 
} 

pełna lista metod są następujące:

@Override 
public void destroyItem(View arg0, int arg1, Object arg2) { 
    ((ViewPager) arg0).removeView((View) arg2); 
} 

@Override 
public boolean isViewFromObject(View arg0, Object arg1) { 
    return arg0 == ((View) arg1); 
} 

@Override 
public Parcelable saveState() { 
    return null; 
} 

@Override 
public void finishUpdate(View arg0) { 
} 

@Override 
public void restoreState(Parcelable arg0, ClassLoader arg1) { 
} 

@Override 
public void startUpdate(View arg0) { 
} 
+1

arg0 to świetna nazwa zmiennej! – Roel

Odpowiedz

46

Zamiast zapisywania stan tych stron można zmodyfikować ViewPager, więc buforuje wszystkie strony zamiast niszcząc je i odtwarzając je podczas przewijania.

Tak na przykład, jeśli masz 4 strony:

ViewPager pager = (ViewPager) findViewById(R.id.viewpager); 
pager.setOffscreenPageLimit(3); // the number of "off screen" pages to keep loaded each side of the current page 
pager.setAdapter(new PageAdapter(context)); 

Teraz Twoje strony będą trzymane „żywe”

Bądź ostrożny z tą techniką jednak ponieważ zwiększy zużycie pamięci. Liczba przekazana do setOffscreenPageLimit() to liczba stron, które zachowa każda strona bieżącej strony. W tym przypadku mamy łącznie 4 strony, więc najgorszy scenariusz to sytuacja, w której znajdujemy się na samym końcu zestawu stron - mamy obecnie widoczną stronę, a pozostałe 3 strony są poza ekranem i pozostają w ten sposób w pamięci. Jednak przy większym zbiorze danych może to potencjalnie oznaczać, że 7 stron jest przechowywanych w pamięci (bieżąca strona plus 3 z każdej strony).

Ogólnie rzecz biorąc, bardziej optymalnym rozwiązaniem byłoby odpowiednie radzenie sobie z rozładowywaniem i ponownym ładowaniem stanu strony i ponowne renderowanie ich.

Mam nadzieję, że to pomoże

+0

Nie wiedziałem, że istnieje limit wyłączenia ekranu, przyjrzymy się temu i poinformujemy. Dzięki za twoją radę :) – Hadden11

+0

Nie wiem, czy to coś, co robię źle, ale przy wprowadzaniu tego limitu ekranu wychodzi: -> Metoda setOffscreenPageLimit (int) jest niezdefiniowana dla typu nie wydaje się lubić powiązana z przeglądarką wideo – Hadden11

+0

jaki jest wygląd importu dla twojego okna podglądu? powinien być importowany android.support.v4.view.ViewPager; –