Как сохранить позицию ListView
Возможный дубликат:
Сохранять/сохранять/восстанавливать позицию прокрутки при возврате в ListView
Как я могу сохранить позицию своего ListView в своей деятельности, когда я перехожу к другому действию (путем запуска другого намерения), а затем вернусь (нажмите кнопку "Назад" )?
Спасибо.
Ответы
Ответ 1
Объявить глобальные переменные:
int index = 0;
ListView list;
и сделайте ссылку на свой ListView
в onCreate()
:
list = (ListView) findViewById(R.id.my_list);
Далее, в onResume()
, добавьте эту строку в конец:
list.setSelectionFromTop(index, 0);
Наконец, в onPause
добавьте следующую строку в конец:
index = list.getFirstVisiblePosition();
Ответ 2
Простой....
@Override
protected void onPause()
{
index = listView.getFirstVisiblePosition();
// store index using shared preferences
}
и..
@Override
public void onResume() {
super.onResume();
// get index from shared preferences
if(listView != null){
if(listView.getCount() > index)
listView.setSelectionFromTop(index, 0);
else
listView.setSelectionFromTop(0, 0);
}
Ответ 3
Вы должны использовать onSaveInstanceState
для сохранения положения прокрутки, а затем использовать onCreate
или onRestoreInstanceState
для его восстановления.
http://developer.android.com...#onSaveInstanceState...
Ответ 4
Обратите внимание, что использование ListView.getScrollY() НЕ РАБОТАЕТ, чтобы восстановить положение прокрутки.
Смотрите Android: ListView.getScrollY() - это работает?
Это относится к количеству прокрутки всего представления, поэтому оно почти всегда будет 0.
Слишком часто случалось со мной, что это значение было 0.
ListView.getFirstVisiblePosition() с ListView.setSelection() работает более надежно.
Ответ 5
@Override
protected void onPause()
{
// Save scroll position
SharedPreferences preferences = context.getSharedPreferences("SCROLL", 0);
SharedPreferences.Editor editor = preferences.edit();
int scroll = mListView.getScrollY();
editor.put("ScrollValue", scroll);
editor.commit();
}
@Override
protected void onResume()
{
// Get the scroll position
SharedPreferences preferences = context.getSharedPreferences("SCROLL", 0);
int scroll = preferences.getInt("ScrollView", 0);
mListView.scrollTo(0, scroll);
}