我已经设置了一个ListView,每行包含一个Checkbox(以及TextView)。出于某种原因,当我“检查”其中一个方框时,它似乎“检查”ListView中相反的方框(即选择顶部框时,底部复选框将被选中而顶部仍未选中。
我意识到这里没有任何代码可以使用,但我只是想知道这是否是一般问题?如果没有,我可以尝试发布一些代码。谢谢!
答案 0 :(得分:4)
视图在ListView中被回收。这就是为什么有些人在你认为不应该被检查的原因。
以下是此交易:该复选框不知道您的适配器中代表哪个项目。它只是ListView中连续的一个复选框。您需要做一些事情来“教”他们当前正在显示的数据集中的项目。因此,不要使用像String数组那样简单的东西作为适配器的数据,而是创建一个新的模型对象,用于存储复选框的状态。然后,在返回getView()
中的行之前,您可以执行以下操作:
//somewhere in your class
private RowData getData(int position) {
return(((MyAdapter)getListAdapter()).getItem(position));
}
//..then in your adapter in getView()
RowData object = getModel(position);
if(object.isChecked()) {
myCheckbox.setChecked(true);
} else {
myCheckbox.setChecked(false);
}
//then retun your view.