ListView/RecyclerView 中正确使用 EditText CheckBox

在 ListView/RecyclerView Item 中 使用EditText CheckBox 控件时 滚动列表时 EditText 值错乱 CheckBox checked 值同样错乱,原因在于复用Item时 设置控件value时 触发了old Item 监听器回调,回调中改变了控件value

错误用法

1
2
3
4
5
6
7
checkBox.setChecked(model.isChecked);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
model.setChecked(isChecked);///改变 DataPoJo
}
});

正确用法

1
2
3
4
5
6
7
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
model.setChecked(isChecked);//改变 DataPoJo
}
});
checkBox.setChecked(model.isChecked);

结论

先设Item 监听器,Item复用时,监听器是new 的

0%