2

我想要完成的事情

我有一个 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)。

4

0 回答 0