2

私が達成しようとしていること

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) をターゲットにしていることに言及する必要がありました。

4

0 に答える 0