`convertView` 復用時,`CheckBox` 狀態隨 View 復用而顯示錯誤數據。
// 數據模型
class Item { String text; boolean checked; }
List- data = new ArrayList<>();
// Adapter
@Override public View getView(int pos, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else holder = (ViewHolder) convertView.getTag();
Item item = data.get(pos);
holder.text.setText(item.text);
holder.checkBox.setOnCheckedChangeListener(null); // 避免觸發舊監聽
holder.checkBox.setChecked(item.checked);
holder.checkBox.setOnCheckedChangeListener((btn, isChecked) -> {
item.checked = isChecked; // 同步回數據模型
});
return convertView;
}