我的问题是,当我检查Checkbox
时,它会转向检查,但它会复制检查状态,以查看可见列表中的下一个ListView
项目(例如,当我可以看到项目时在一个屏幕上位置0-5 / 6,它位于位置7-8上的元素... ...
这是我的onClick方法:
viewHolder.messageSelectBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (viewHolder.messageSelectBox.isChecked()) {
Log.i("itemID", String.valueOf(getItemId(position)));
Log.i("position", String.valueOf(position));
mListOfItemsToDelete.add(position);
Collections.sort(mListOfItemsToDelete);
Collections.reverse(mListOfItemsToDelete);
} else {
for (int i = 0; i < mListOfItemsToDelete.size(); i++) {
int pos = mListOfItemsToDelete.get(i);
if (pos == position) {
mListOfItemsToDelete.remove(i);
}
}
}
}
});
setOnClickListener
位于ListView适配器中的getView()
...
getView()
方法:
final ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.messages_list_view_single, parent, false);
}
viewHolder = new ViewHolder(convertView);
viewHolder.messageSelectBox = (CheckBox) convertView.findViewById(R.id.messageSelectBox);
那么伙计们,你知道出了什么问题吗?
答案 0 :(得分:1)
在getView()
中,您必须在setOnClickListener
之前加载已检查状态,如下所示。
viewHolder.messageSelectBox.setChecked(mListOfItemsToDelete.contains(position))
因此,检查状态将保留在mListOfItemsToDelete
中,并使用该状态为复选框加载已选中状态。
答案 1 :(得分:1)
这是列表视图中非常常见的问题。发生此问题是因为当您滚动列表视图时重复使用列表项。所以你需要每次都要处理。
为此,您需要在模型类中使用布尔值。并选中复选框时,将Boolean的值设置为true / false。