[英]Android - getView() in CustomCursorAdapter and ListView?
[英]Android listview getView checkBox
当我单击列表中的一行时,发生了奇怪的事情,相应的复选框也被选中。 因此,一切都正确,但是奇怪的是,复选框每隔7行自动将其设置为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;
}
}
发生的事情称为视图回收 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()
方法,并根据Dettaglio1
在当前位置设置CheckBox
的选中状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.