Сохранение данных и просмотров Android Viewpager - программирование

Сохранение данных и просмотров 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) {
}
4b9b3361

Ответ 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 с каждой стороны).

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

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