To Do リストを表す SQLite テーブルがあります。各行には、、、_id
およびtitle
フラグがありcompleted
ます。ListView
各行にタイトルがあり、フラグにマップされたチェックボックスがありますcompleted
。CursorAdapter
そして、チェックボックスの状態を設定するカスタムがありますbindView
。チェックボックスには、OnClick
切り替えられたときにデータベースの状態を更新するコールバックがあります。
問題は、ビューが古いカーソル データから再構築されているため、アイテムがスクロールされて画面に戻ると、チェックボックスの状態が失われることです。
ここで推奨される解決策は、データが変更されるたびにカーソルをダンプして再フェッチすることであることを理解しています。これは、痛々しいほど非効率的だと思います。チェックボックスを切り替えると、結果セットで文字通り 1 ビットのデータが変更されました。カーソル全体を捨てるのはやり過ぎのように感じます。
私が試した別の方法は、completed
フラグをキャッシュし、アイテムが切り替えられたときにデータベースとキャッシュを更新し、キャッシュをチェックすることbindView
です。これは機能しますが、ぎこちなく感じます。
ここで何か不足していますか?上記よりも良いパターンはありますか?小さな変更が発生するたびにカーソルを期限切れにするコストを過大評価していませんか?