在 Adapter 的 getView 中為每行綁定 CheckBox,點擊時維護一個**全局選中 ID 集合**(ArrayList<Long> selectedIds),刪除按鈕點擊時遍歷集合執行批量刪除。
public class MyAdapter extends SimpleAdapter {
private List selectedIds = new ArrayList<>(); // 全局或外部傳入
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = super.getView(position, convertView, parent);
CheckBox cb = row.findViewById(R.id.cb1);
// 根據 selectedIds 設置勾選狀態(防止複用錯亂)
Long itemId = getItemId(position);
cb.setChecked(selectedIds.contains(itemId));
cb.setOnClickListener(v -> {
if (cb.isChecked()) selectedIds.add(itemId);
else selectedIds.remove(itemId);
});
return row;
}
}
btnDelete.setOnClickListener(v -> {
for (Long id : selectedIds) {
db.delete(TABLE, "_id=?", new String[]{String.valueOf(id)});
}
selectedIds.clear();
adapter.notifyDataSetChanged();
cursor.requery(); // 或重新查詢
});
selectedIds 必須**單例或由 Activity 持有**,不能定義在 Adapter 內部(因複用會重置)。position(滾動複用會變)。db.beginTransaction())提高性能。