2012-01-17 3 views
13

Надеюсь, кто-то может помочь мне с небольшой проблемой/путаницей. У меня есть с Viewpagers и сохранение данных.Android Viewpager с сохранением данных и просмотров

ПРОБЛЕМА:

При прокрутке через четыре представления у меня есть, первый вид имеет две блесны, два TextViews, которые отображают строку или выбранный элемент. если я перейду на третью страницу и вернусь ко второй странице, данные в первом представлении будут потеряны. чтобы сохранить данные.

Будет ли это сделано в двух подпрограммах, указанных ниже? (лучше всего предположить, будет ли это), если да, какие команды нужно указывать?

КОД:

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

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

EXTRA INFO: ViewPager используется в

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

Полный перечень методов заключаются в следующем:

@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 - отличное имя переменной! – Roel

ответ

46

Вместо спасения состояния этих страниц, вы можете изменить свой ViewPager, чтобы он буферизует все ваши страницы, а не уничтожая их и воссоздавая их при прокрутке.

Так, например, если у вас есть 4 страницы:

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)); 

Теперь ваши страницы будут храниться «живой»

Будьте осторожны с этой техникой, однако, так как это увеличит потребление памяти. Число, переданное setOffscreenPageLimit(), - это количество страниц, которые каждая сторона текущей страницы сохраняется. В этом случае у нас всего 4 страницы, поэтому самый худший сценарий - когда мы находимся на крайнем краю набора страниц - у нас есть текущая видимая страница, а затем оставшиеся 3 страницы выходят за пределы экрана в одну сторону и, таким образом, сохраняются в памяти. Однако с большим набором данных это потенциально может означать, что 7 страниц хранятся в памяти (текущая страница плюс 3 с каждой стороны).

Как правило, более оптимальным решением было бы правильно разобраться с разгрузкой и перезагрузкой состояния страницы и повторной визуализацией.

Надеюсь, это поможет

+0

Я не знал, что есть предел за пределами экрана, посмотрим на это и дайте знать. Спасибо за совет :) – Hadden11

+0

не знаю, если его что-то я делаю неправильно, но при входе, что от ограничения экрана он придумывает -> метод setOffscreenPageLimit (INT) не определена для типа не кажется, нравится быть связанный с viewpager – Hadden11

+0

Как выглядит импорт для вашего viewpager? должен быть import android.support.v4.view.ViewPager; –

Смежные вопросы