私が達成しようとしていること
ListView に SQLite データベースのコンテンツを表示する CursorAdapter の実装があります。リスト ビューのコントロールを使用すると、ユーザーはデータベース内の値を切り替えることができます。
問題
データベース内のレコードが更新された後、CursorAdapter 実装で使用される Cursor を新しい値で更新する必要があります。Android のドキュメントによると、これを行う最善の方法は、新しいカーソルをロードし、CursorAdapter で changeCursor を呼び出すことです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 のスクロールが奇妙に動作します。「フリング」によりリストがスクロールし、スクロールが停止するまでスクロールは停止しません。通常の動作では、ユーザーはスクロール リストにタッチしてリストのスクロールを停止するか、別のフリングを実行してこのリストをさらにスクロールすることができます。changeCursor 呼び出しが実行される前は、ListView は正常に動作します。
どうすればこの厄介な副作用を止めることができますか?!
編集:私は android.widget.CursorAdapter を使用し、API レベル 7 (Eclair) をターゲットにしていることに言及する必要がありました。