Сохранение данных и просмотров Android Viewpager
Надеюсь, кто-то может помочь мне с небольшой проблемой/запутанностью, которую я имею с помощью Viewpagers и сохранением данных.
ПРОБЛЕМА:
При прокрутке всех четырех видов, которые у меня есть, первое представление имеет два спиннера, два текстовых изображения, отображающих строку или выбранный элемент. если я перейду на третью страницу и вернусь ко второй странице, данные в первом представлении будут потеряны. чтобы сохранить данные.
Будет ли это сделано в двух подпрограммах, указанных ниже? (лучше всего предположить, будет ли это), если да, какие команды нужно указывать?
CODE:
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
}
@Override
public Parcelable saveState() {
return null;
}
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
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
Вместо сохранения состояния этих страниц вы можете изменить свой 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 с каждой стороны).
Как правило, более оптимальным решением было бы правильно разобраться с разгрузкой и перезагрузкой состояния страницы и повторной рендерингом.
Надеюсь, что это поможет