私がやろうとしているのはListView
、内部SQLiteデータベースを使用してデータを取得するアプリを配置することです。ユーザーがクリックすると、新しいクエリを実行して新しいデータがDBからフェッチされます。
インターフェイスListView
を拡張LinearLayout
および実装するアイテムのカスタムビューを実装しました。Checkable
動作します。
に基づいたカスタムアダプタを入手しましたCursorAdapter
。空のカーソルでアダプタOnCreate()
を設定しています。ListView
ListView markersList = (ListView) findViewById(R.id.markersList);
Cursor c = null;
MarkersListAdapter adapter = new MarkersListAdapter(this, c, 0);
markersList.setAdapter(adapter);
次に、更新するために新しいカーソルを渡すAsyncTask
データベースをクエリしています。私はこれを次のように行っています:doInBackground()
onPostExecute()
ListView
adapter.changeCursor(newCursor);
次に、デフォルトですべてのアイテムをチェックしています(ユーザーは不要なアイテムのチェックを外すだけです)
for(int i = 0; i < this.markersList.getCount(); i++)
{
this.markersList.setItemChecked(i, true);
}
ここまでは順調ですね。しかし、私がするとき
int s = this.markersList.getCheckedItemCount();
間違った値を取得しています。古いカーソルに関連付けられていると思います。これは、新しいカーソルの行数が新しいカーソルの行数よりも少ない場合にのみ発生します。
一般的に、私はこのようなものを手に入れています
int s = this.markersList.getCheckedItemCount(); // s = 7
int d = this.markersList.getCount(); // d = 5
これに対する解決策はありますか?