更改游标后,getCheckedItemCount()返回错误的值

时间:2012-11-24 22:32:17

标签: android android-listview

我要做的是将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

有解决方法吗?

1 个答案:

答案 0 :(得分:2)

最简单的解决方案是手动清除检查计数:

this.markersList.clearChoices();
for(int i = 0; i < this.markersList.getCount(); i++)
{        
    this.markersList.setItemChecked(i, true);
}