2012-03-19 3 views
1

Я создал пользовательский адаптер и вызвал notifyDataSetChanged(), а затем обновил данные. Но после вызова notifyDataSetChanged() я не могу остановить прокрутку списка по нажатию. Я смотрел на исходном коде андроида и нашел этот код в файле AbsListView.class (который является родителем ListView)Прокрутка прокрутки ListView не работает

if (!mDataChanged) { ... } 

Там есть код, чтобы остановить прокрутку ListView на сенсорном событии.

Итак, мы вызываем notifyDataSetChanged(), мы устанавливаем mDataChanged в true и поэтому не можем остановить прокрутку.

Не могли бы вы помочь мне узнать, как включить прокрутку остановки после изменения данных?

ответ

0

Возможно, вы читаете данные, а ListView вызывает метод getItem. Использование асинхронной загрузки данных (Handler) может быть лучшей идеей. Вы можете найти более подробную информацию в this answer.

0

Вам необходимо сохранить положение прокрутки вашего ListView и прокрутить список до этой суммы прокрутки после обновления списка.

Для этого вызовите этот метод перед adapter.notifyDataSetChanged();

private void saveListScrollPosition() { 
     // save index and top position 
     index = _listview.getFirstVisiblePosition(); 
     View view = _listview.getChildAt(0); 
     top = (view == null) ? 0 : view.getTop(); 
    } 

И после того, как adapter.notifyDataSetChanged();

написать следующую строку -

// restore list scroll position 
    _listview.setSelectionFromTop(index, top); 

где index, top и _listview все поля, доступные к любому методу.

+0

Почему вы думаете, что это должно помочь? Потому что в коде Android проверяет if (! MDataChanged) {...} (однако я попробовал ваш код, и это не помогло) – karabara

Смежные вопросы