Страницы

Поиск по вопросам

воскресенье, 22 декабря 2019 г.

ListView, запомнить/восстановить положение скрола

#java #android #listview


Как запомнить положение скрола ListView и восстановить их при следующем возврате
на активити с ним?
    


Ответы

Ответ 1



Лично я считаю наиболее оптимальным следующий способ (подходит для поворотов устройства и переходов по стеку в пределах одного запуска приложения): Parcelable state; @Override public void onViewCreated(final View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); listView.setAdapter(adapter); ... if(state != null) { listView.onRestoreInstanceState(state); } } @Override public void onPause() { state = listView.onSaveInstanceState(); super.onPause(); } То есть мы используем методы сохранения и востановления состояния списка, которые специально предназаначены для этого. Если требуется долгосрочное хранение (например, запомнить позицию после выхода из приложения), то можно использовать следующий способ: SharedPreferences pref; @Override public void onResume() { super.onResume(); pref = PreferenceManager.getDefaultSharedPreferences(this); mList.setSelectionFromTop(pref.getInt("index",0), pref.getInt("top",0)); } @Override public void onPause() { int index = mList.getFirstVisiblePosition(); View v = mList.getChildAt(0); int top = (v == null) ? 0 : (v.getTop() - mList.getPaddingTop()); pref = PreferenceManager.getDefaultSharedPreferences(this); Editor edit = pref.edit(); edit.putInt("index", index); edit.putInt("top", top); edit.apply(); super.onPause(); } То есть, здесь мы перед выходом из активити получаем позицию, в которой находится ListView и сохраняем ее в SharedPrefrences для долгосрочного хранения, затем восстанавливаем при (пере-)запуске активити сохраненную позицию в списке. Другие варианты решения enSO

Комментариев нет:

Отправить комментарий