我有一个从自定义CursorAdapter填充的ListView。每个项目(-row)都有一个复选框。
在我解释这个问题之前,有几个重要的事实:
A。已检查/未检查的数据来自数据库。
乙即可。我将每个“复选框”的位置保存到布尔数组中。
C。没有办法知道选中了哪个复选框,而没有重新查询,直到我滚动到它,因为它尚未加载。
问题是:
我正在尝试创建“全部清除”按钮。对于每个“已选中”复选框,我必须将数据库中的列更新为“否”。
我尝试LV.scrollTo(lastItem)
,然后检查每行是否已选中:
for (int i = 0; i < cursor.getCount(); i++) {
boolean t = itemChecked.get(i); //check the array to see if this row is checked
if (t == true) {
//set to "no" in the DB
}
但它似乎“跳过”显示在最顶部和最底部之间的行之间的行。 我认为它正在发生,因为它们没有被渲染,因此没有在数组中保存“已检查”状态。
然后我尝试了这一小段代码,它会滚动每5行左右,但它仍然不起作用:
int j = 0;
//loop times is the array.count() over the amount of rows that fit in the screen
while(j < loopTimes){
int n = j*fitToScreen;
Listview.setSelection(n);
j++ ;
}
它只是直接跳到底部,没有读取那些行。
我的猜测是没有足够的时间来渲染行。
有没有其他方法可以向下滚动而不跳过行,或完成我想要做的事情?
提前致谢。