4

我想要做的是放入ListView我的应用程序,它使用内部 SQLite 数据库来获取数据。当用户单击时,通过执行新查询从数据库中获取新数据。

我已经为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()给 update的数据库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

有针对这个的解决方法吗?

4

1 回答 1

3

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

this.markersList.clearChoices();
for(int i = 0; i < this.markersList.getCount(); i++)
{        
    this.markersList.setItemChecked(i, true);
}
于 2012-11-24T22:52:15.627 回答