我要做的是将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
有解决方法吗?
答案 0 :(得分:2)
最简单的解决方案是手动清除检查计数:
this.markersList.clearChoices();
for(int i = 0; i < this.markersList.getCount(); i++)
{
this.markersList.setItemChecked(i, true);
}