Android Viewpager сохранение данных и просмотров - PullRequest
13 голосов
/ 17 января 2012

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

ПРОБЛЕМА:

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

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

КОД:

@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 Ответ

46 голосов
/ 17 января 2012

Вместо сохранения состояния этих страниц вы можете изменить свой 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 с каждой стороны).

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

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

...