Как сохранить позицию 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);
}