Tôi có một Android ListView
có các mục có hộp kiểm.Thay đổi hộp kiểm có giá trị hai lần
Hộp kiểm được chọn theo mặc định. Khi bỏ chọn, nó sẽ bị xóa khỏi danh sách.
Vấn đề là onCheckedChanged
đang được bắn hai lần: khi tôi chạm vào hộp kiểm để bỏ chọn nó (với isChecked
false
) và sau khi tôi loại bỏ các mục (với isChecked
true
).
Đây là mã có liên quan của ArrayAdapter tôi:
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item, parent, false);
holder = new ViewHolder();
holder.check = (CheckBox) convertView.findViewById(R.id.check);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final Object item = this.getItem(position);
holder.check.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!isChecked) {
remove(item); // This somehow calls onCheckedChanged again
}
}
});
return convertView;
}
Tôi đang làm gì sai?
Phương thức 'remove()' làm gì, vì đó không phải là phương thức trên 'ListAdapter'? – CommonsWare
Tôi đang sử dụng ArrayAdapter. Theo mã nguồn Android, phương thức remove loại bỏ mục khỏi mảng và thông báo rằng dữ liệu đã bị thay đổi. – hpique