我想要完成的事情
我有一个 CursorAdapter 的实现,它在 ListView 中显示来自 SQLite 数据库的内容。列表视图中的控件允许用户切换数据库中的值。
问题
更新数据库中的记录后,CursorAdapter 实现使用的 Cursor 需要使用新值进行更新。根据 Android 文档,最好的方法是加载一个新光标并在 CursorAdapter http://developer.android.com/reference/android/support/v4/widget/CursorAdapter.html#changeCursor%28android上调用 changeCursor .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 的滚动行为异常。“fling”会导致列表滚动,并且滚动不会停止,直到它停止。正常行为将允许用户通过触摸滚动列表来停止列表滚动,或者通过执行另一个投掷来进一步滚动该列表。ListView 在执行 changeCursor 调用之前表现正常。
我怎样才能阻止这种讨厌的副作用?!
编辑:我应该提到我正在使用 android.widget.CursorAdapter 并针对 API 级别 7 (Eclair)。