我正在尝试完成的内容
我有一个CursorAdapter实现,它在ListView中显示来自SQLite数据库的内容。列表视图中的控件允许用户切换数据库中的值。
问题
更新数据库中的记录后,需要使用新值更新CursorAdapter实现使用的Cursor。根据Android文档,最好的方法是加载一个新游标并在CursorAdapter http://developer.android.com/reference/android/support/v4/widget/CursorAdapter.html#changeCursor%28android.database.Cursor%29上调用changeCursor。
// 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)。