Страница 1 из 1

Как сохранить состояние ListView в фрагменте при повороте эк

Добавлено: 21 июл 2013, 23:03
smartmore
Здравствуйте, облазил весь интернет в поиске решения своей проблемы. Необходимо сохранить состояние ListView в фрагменте при повороте экрана. Сразу объясню, как работает приложение: есть активити, в нём фрагмент с ViewPager, страницы ViewPager тоже фрагменты, в них списки, состояние которых надо сохранить. Пробовал:
@Override
public void onSaveInstanceState(Bundle b){
super.onSaveInstanceState(b);
b.putParcelable("LIST_VIEW_STATE", timeline_list.onSaveInstanceState());
Log.d(LOG_TAG, "save state");
}

и

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
if(savedInstanceState!=null){
timeline_list.onRestoreInstanceState(savedInstanceState.getParcelable("LIST_VIEW_STATE"));
}
}

- не помогло

Re: Как сохранить состояние ListView в фрагменте при поворот

Добавлено: 22 июл 2013, 05:22
klblk
Как я понимаю у ListView есть какие-то данные, по которым вы его строите, не проще будет сохранять именно их?

Re: Как сохранить состояние ListView в фрагменте при поворот

Добавлено: 22 июл 2013, 09:16
smartmore
Данные для списка берутся из БД, мне бы просто позицию прокрутки сохранить, так как при повороте список прокручивается на самый верх

Re: Как сохранить состояние ListView в фрагменте при поворот

Добавлено: 22 июл 2013, 09:39
klblk
smartmore писал(а):Данные для списка берутся из БД, мне бы просто позицию прокрутки сохранить, так как при повороте список прокручивается на самый верх
хм, ну тогда может быть что-то типа:
http://stackoverflow.com/questions/3014 ... a-listview

Re: Как сохранить состояние ListView в фрагменте при поворот

Добавлено: 22 июл 2013, 12:24
Finch

Re: Как сохранить состояние ListView в фрагменте при поворот

Добавлено: 22 июл 2013, 16:20
smartmore
После нескольких тестов выяснилось, что проблема не в том, что данные не сохраняются, а в том, что методы

timeline_list.onRestoreInstanceState(savedInstanceState.getParcelable("LIST_VIEW_STATE"));
или
timeline_list.setSelectionFromTop(savedInstanceState.getInt("index"), savedInstanceState.getInt("top"));

ничего не делают

Re: Как сохранить состояние ListView в фрагменте при поворот

Добавлено: 22 июл 2013, 16:53
smartmore
к примеру smoothScrollToPosition работает

Re: Как сохранить состояние ListView в фрагменте при поворот

Добавлено: 22 июл 2013, 20:08
smartmore
:!: :!: :!: Проблема решена:

timeline_list.post(new Runnable() {
@Override
public void run() {
timeline_list.setSelectionFromTop(index, top);
}
});