首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

GridView 實現統計已修改 Item 的 ID 位置

     編輯:程式設計疑難解答

需求分析

GridView 中點擊 Item 變色標記,點擊按鈕時統計所有已變色 Item 的位置(ID),去重輸出。例如點擊了第 2、5、1、9、2 個 Item(第 2 點擊兩次),輸出 1,5,9(去重後的已修改位置)。

核心思路

使用集合記錄已點擊位置,點擊時添加,統計時遍歷輸出。

實現方案

1. 定義數據結構

// 用 HashSet 自動去重,存儲已點擊的 position
private Set<Integer> selectedPositions = new HashSet<>();

2. Item 點擊監聽器

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")); // 變色標記
    }
});

3. 統計按鈕點擊事件

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 保存勾選狀態,避免列表復用導致顏色錯亂
  • 適配器內部管理:在 Adapter 中維护 Set<Integer>,getView() 根據集合設置背景色,更符合 MVC
  • 多選模式:設置 gridView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE) 利用系統 Checkable 接口

完整邏輯圖解

點擊 Item
    ↓
判斷 position 是否在 Set 中
    ↓ 是 → 移除,恢復背景
    ↓ 否 → 添加,設置高亮背景
    ↓
點擊統計按鈕
    ↓
Set 轉 List → 排序 → Join 輸出
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved