You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio中基于Model类动态添加Choice Chips并筛选RecyclerView内容

实现方案如下:

前置依赖确认

首先确保你的项目引入了Material组件库,在模块级build.gradle中添加依赖:

implementation 'com.google.android.material:material:1.11.0'

同时你的应用主题要继承MaterialComponents系列主题,否则Chip组件会显示异常。


步骤1:提取所有分类、判断是否存在指定type

首先从原始数据集合中提取去重的type值,同时可以直接判断是否存在你需要的特定type:

// 原始的全量数据集合
private ArrayList<Model> originalAnimalList = new ArrayList<>();
// 存储去重后的分类列表
private ArrayList<String> typeList = new ArrayList<>();

private void initTypeData() {
    // 可选:添加「全部」分类,默认展示所有内容
    typeList.add("全部");
    HashSet<String> typeSet = new HashSet<>();
    for (Model model : originalAnimalList) {
        typeSet.add(model.getType());
    }
    typeList.addAll(typeSet);

    // 你要判断是否存在herbivore分类直接用这行代码即可,返回true/false
    boolean hasHerbivore = typeSet.contains("herbivore");
}

步骤2:在布局中添加ChipGroup承载Chips

<com.google.android.material.chip.ChipGroup
    android:id="@+id/chipGroup"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:singleSelection="true"
    app:chipSpacingHorizontal="8dp"
    android:paddingHorizontal="16dp"
    android:paddingVertical="8dp"/>

<!-- 下方放你用来展示内容的RecyclerView即可 -->

这里设置singleSelection="true"就是单选模式,符合Choice Chips的交互逻辑。


步骤3:动态生成Chip并添加选中监听

private ChipGroup chipGroup;
// 你的RecyclerView适配器
private AnimalAdapter adapter;

private void initChips() {
    chipGroup.removeAllViews();
    for (int i = 0; i < typeList.size(); i++) {
        Chip chip = new Chip(this);
        chip.setText(typeList.get(i));
        chip.setCheckable(true);
        // 默认选中第一个「全部」选项
        if (i == 0) chip.setChecked(true);
        chipGroup.addView(chip);
    }

    // 监听Chip选中事件
    chipGroup.setOnCheckedStateChangeListener((group, checkedIdList) -> {
        if (checkedIdList.isEmpty()) return;
        Chip checkedChip = group.findViewById(checkedIdList.get(0));
        String selectedType = checkedChip.getText().toString();
        // 筛选对应分类的数据
        filterAnimalList(selectedType);
    });
}

步骤4:实现数据筛选逻辑,刷新RecyclerView

首先在你的RecyclerView适配器中添加更新数据的方法:

// 在AnimalAdapter类中添加
public void updateData(ArrayList<Model> newList) {
    // currentList是适配器当前持有的展示用数据集合
    this.currentList = newList;
    notifyDataSetChanged();
}

然后实现筛选逻辑:

private void filterAnimalList(String selectedType) {
    ArrayList<Model> filteredList = new ArrayList<>();
    if (selectedType.equals("全部")) {
        filteredList.addAll(originalAnimalList);
    } else {
        for (Model model : originalAnimalList) {
            if (model.getType().equals(selectedType)) {
                filteredList.add(model);
            }
        }
    }
    // 刷新列表展示
    adapter.updateData(filteredList);
}

内容的提问来源于stack exchange,提问作者James Bond

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:18:02