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

Android Spinner 聯動 ListView 實現數據篩選

     編輯:程式設計綜合問答

需求場景

頁面包含一個 Spinner(下拉選擇器)和一個 ListView(使用 BaseAdapter),要求選擇 Spinner 某項時,ListView 只顯示符合條件的數據,其餘隱藏。

核心思路

  1. Spinner 綁定 Adapter:為 Spinner 設置數據源(如分類列表)。
  2. 監聽選擇事件:spinner.setOnItemSelectedListener 獲取用戶選中的條件值。
  3. 篩選數據源:在監聽器中根據條件過濾原始數據列表,生成新列表。
  4. 刷新 ListView:調用 listViewAdapter.notifyDataSetChanged() 觸發 UI 更新。

關鍵代碼示例

// 原始完整數據
List allItems = loadAllItems(); 

// Spinner 選擇監聽
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView parent, View view, int position, long id) {
        String filter = parent.getItemAtPosition(position).toString();
        List filtered = new ArrayList<>();
        for (Item item : allItems) {
            if (filter.equals("全部") || item.getCategory().equals(filter)) {
                filtered.add(item);
            }
        }
        // 更新 Adapter 內部數據並刷新
        listAdapter.updateData(filtered); // 自定義方法替換內部列表
        listAdapter.notifyDataSetChanged();
    }
    @Override public void onNothingSelected(AdapterView parent) {}
});

Adapter 輔助方法

public void updateData(List newData) {
    this.data.clear();
    this.data.addAll(newData);
}

進階優化

  • 大數據量時,考慮在後台線程篩選,避免阻塞 UI。
  • 使用 Filterable 接口實現 Filter 邏輯,配合 SearchView 更靈活。

總結

「Spinner 選擇 → 篩選數據源 → Adapter 更新 → notifyDataSetChanged」是 Android 列表篩選的標準模式,簡單高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved