Прокрутка остановки ListView не работает - PullRequest
1 голос
/ 19 марта 2012

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

if (!mDataChanged) { ... }

Существует код для остановки прокрутки ListView при событии касания.

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

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

Ответы [ 2 ]

0 голосов
/ 21 марта 2012

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

0 голосов
/ 19 марта 2012

Вам необходимо сохранить позицию прокрутки вашего 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 - все поля, доступные любомуспособ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...