发生了一些奇怪的事情,当我点击列表中的一行时,也会选中相应的复选框。所以一切都是正确的,但奇怪的是,每隔7行,复选框setcheked为true。 有什么问题?谢谢你的帮助
ListAdapter adapter = new ArrayAdapter<Dettaglio1>
(this, R.layout.deteails_list_pdf, R.id.tv_nome_categoria, dettagli1) {
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = super.getView(position, convertView, parent);
...
...
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final Dettaglio1 d1 = dettagli1.get(position);
d1.setChecked(!d1.isChecked());
CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkBox2);
checkBox.setChecked(d1.isChecked());
}
});
return row;
}
};
list.setAdapter(adapter);
private class Dettaglio1 {
String nome;
private boolean isChecked;
public void setChecked(boolean isChecked) {
this.isChecked = isChecked;
}
public boolean isChecked() {
return isChecked;
}
}
答案 0 :(得分:1)
正在发生的事情被称为查看回收 - ListView
和RecyclerView
背后的核心机制。每隔7个CheckBox
进行一次检查,因为它与之前的状态一样,会被回收并显示相同的CheckBox
。
要解决您的问题,您需要在数据模型(Dettaglio1
类)中保持“已检查”状态。例如,您可以像这样修改数据模型:
public class Dettaglio1 {
// stuff
private boolean isChecked;
public void setChecked(boolean isChecked) {
this.isChecked = isChecked;
}
public void isChecked() {
return isChecked;
}
// more stuff
}
你的听众如此:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final Dettaglio1 d1 = dettagli1.get(position);
d1.setChecked(!d1.isChecked());
CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkBox2);
checkBox.setChecked(d1.isChecked());
}
修改强>
您还需要覆盖适配器的getView()
方法,并根据当前位置的CheckBox
设置Dettaglio1
的已检查状态。