GridView 中點擊 Item 變色標記,點擊按鈕時統計所有已變色 Item 的位置(ID),去重輸出。例如點擊了第 2、5、1、9、2 個 Item(第 2 點擊兩次),輸出 1,5,9(去重後的已修改位置)。
使用集合記錄已點擊位置,點擊時添加,統計時遍歷輸出。
// 用 HashSet 自動去重,存儲已點擊的 position
private Set<Integer> selectedPositions = new HashSet<>();
gridView.setOnItemClickListener((parent, view, position, id) -> {
// 切換選中狀態:已選則取消,未選則添加
if (selectedPositions.contains(position)) {
selectedPositions.remove(position);
view.setBackgroundColor(Color.TRANSPARENT); // 恢復原色
} else {
selectedPositions.add(position);
view.setBackgroundColor(Color.parseColor("#FFEB3B")); // 變色標記
}
});
btnStat.setOnClickListener(v -> {
if (selectedPositions.isEmpty()) {
Toast.makeText(this, "未選擇任何項目", Toast.LENGTH_SHORT).show();
return;
}
// 轉列表排序輸出
List<Integer> sorted = new ArrayList<>(selectedPositions);
Collections.sort(sorted);
String result = TextUtils.join(",", sorted);
tvResult.setText("已修改位置: " + result); // 輸出如: 1,5,9
});
SparseBooleanArray 或自定義 Bean 保存勾選狀態,避免列表復用導致顏色錯亂Set<Integer>,getView() 根據集合設置背景色,更符合 MVCgridView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE) 利用系統 Checkable 接口點擊 Item
↓
判斷 position 是否在 Set 中
↓ 是 → 移除,恢復背景
↓ 否 → 添加,設置高亮背景
↓
點擊統計按鈕
↓
Set 轉 List → 排序 → Join 輸出