Android CursorAdapter.changeCursor вызывает странное поведение прокрутки ListView - PullRequest
2 голосов
/ 27 февраля 2012

Что я пытаюсь выполнить

У меня есть реализация CursorAdapter, которая отображает содержимое из базы данных SQLite в ListView. Элементы управления в представлении списка позволяют пользователям переключать значения в базе данных.

Проблема

После обновления записей в базе данных курсор, используемый реализацией CursorAdapter, должен быть обновлен новыми значениями. Согласно документации Android, лучший способ сделать это - загрузить новый курсор и вызвать changeCursor на CursorAdapter http://developer.android.com/reference/android/support/v4/widget/CursorAdapter.html#changeCursor%28android.database.Cursor%29.

// Some pseudo code
public void onSomeEvent() { 
    // update the database record
    toggleRecord();
    // load a new cursor
    Cursor newCursor = loadNewCursorFromDb();
    // Load the newCursor into the CursorAdapter which drives the ListView
    MyCursorAdapter adapter = (MyCursorAdapter) listView.getAdapter();
    adapter.changeCursor(newCursor);
    // now the ListView scrolls strangely...
}

После этого вызова changeCursor неприятный побочный эффект вызывает странное поведение прокрутки ListView. «Бросок» заставляет список прокручиваться, и прокрутка не остановится, пока не остановится. Нормальное поведение позволит пользователю остановить прокрутку списка, прикоснувшись к списку прокрутки, или прокрутить этот список дальше, выполнив еще один бросок. ListView ведет себя нормально до выполнения вызова changeCursor.

Как я могу остановить этот неприятный побочный эффект?!

Редактировать: я должен был упомянуть, что я использую android.widget.CursorAdapter и нацеливаю на уровень API 7 (Эклер).

...