Что я пытаюсь выполнить
У меня есть реализация 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 (Эклер).