Представление списка в начало после обновления данных в arrayadapter - PullRequest
5 голосов
/ 26 марта 2012

У меня есть просмотр списка, который обновляется каждые 5 секунд с использованием синтаксического анализа XML.После обновления текущая позиция списка возвращается к первой позиции.Есть ли возможные способы решить эту проблему?

Ответы [ 4 ]

5 голосов
/ 26 марта 2012

Используя setAdapter () для обновления списка, Android сбрасывает позицию. Попробуйте вместо этого заменить адаптер.

Я не знаю, какой адаптер вы используете, поэтому приведу два примера.

ArrayAdapter

adapter = list.getAdapter();
if (adapter == null) {
    // Create new adapter + list.setAdapter()
} else {
    adapter.clear();
    adapter.addAll(newData);
    adapter.notify(notifyDataSetChanged());
}

CursorAdapter

adapter.changeCursor(newCursor);
3 голосов
/ 26 марта 2012

Используйте lv.smoothScrollToPosition(pos), где pos может быть любым целым числом, предпочтительно длиной адаптера, если вы хотите, чтобы просмотр списка осуществлял автопрокрутку до последней добавленной записи по мере ее обновления.

public void smoothScrollToPosition (int position) 


Smoothly scroll to the specified adapter position. The view will scroll such that the indicated position is displayed.
2 голосов
/ 13 января 2015

Этот код поможет вам ....

// get position of listview
int index = listView.getFirstVisiblePosition();
View v = listView.getChildAt(0);
int top = (v == null) ? 0 : v.getTop();

// notify dataset changed or re-assign adapter here

//re-assign the position of listview after setting the adapter again
listView.setSelectionFromTop(index, top);

Ура:)

0 голосов
/ 07 января 2016

попробуйте

adapter.notifyDataSetChanged();
...