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

SearchView输入时列表长度不增加,无法执行循环的问题求助

问题分析与修复方案

我一眼就看到了问题所在——你的search方法里犯了两个关键错误,导致搜索逻辑完全没执行起来:

1. 循环的是空列表,根本不会进入搜索判断

你在search方法里第一行就新建了一个空的myList,然后立刻循环这个空列表:

ArrayList<GarbageInfo> myList = new ArrayList<>(); 
for (GarbageInfo object : myList){
    // 这里的代码永远不会执行
}

空列表的循环体是不会被触发的,所以myList始终是空的,自然无法展示搜索结果。

2. 错误的列表操作逻辑(潜在问题)

就算你循环的是正确的数据源,现在的代码还会有问题:你在循环myList的同时往同一个列表里添加元素,这会导致无限循环或者元素重复添加的问题——因为每次添加元素后,列表长度增加,循环会一直继续下去。


修复后的代码

第一步:确保你有一个全局的原始数据源

首先,你需要有一个保存所有垃圾信息的原始列表(比如在Activity/Fragment里定义全局变量):

// 全局变量,存储所有垃圾信息的原始数据
private ArrayList<GarbageInfo> originalGarbageList;

这个列表应该在初始化的时候(比如onCreate里)就加载好所有数据,而不是每次搜索都新建。

第二步:修正search方法

private void search(String newText) { 
    ArrayList<GarbageInfo> searchResultList = new ArrayList<>(); 
    // 循环原始数据源,而不是空列表
    for (GarbageInfo object : originalGarbageList){
        // 匹配判断:忽略大小写,检查垃圾名称是否包含搜索文本
        if (object.getName().toLowerCase().contains(newText.toLowerCase())){
            searchResultList.add(object); 
        } 
    } 
    Adapter adapter = new Adapter(searchResultList); 
    mGarbageList.setAdapter(adapter); 
    // 可选:如果搜索结果为空,可以给用户提示
    if (searchResultList.isEmpty()) {
        // 比如显示"没有找到匹配的垃圾信息"
    }
}

第三步:优化OnQueryTextListener(可选但推荐)

你可以完善onQueryTextSubmit方法,让用户点击搜索按钮时也能执行搜索,并且消费掉这个事件:

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
    @Override 
    public boolean onQueryTextSubmit(String query) { 
        search(query);
        // 返回true表示我们已经处理了这个提交事件
        return true; 
    } 
    @Override 
    public boolean onQueryTextChange(String newText) { 
        search(newText); 
        return true; 
    } 
});

这样修改后,每次输入搜索文本时,都会遍历原始的垃圾数据列表,把匹配的元素收集到结果列表里,再更新RecyclerView的适配器,就能正常展示搜索结果了。

内容的提问来源于stack exchange,提问作者Joseph Menezes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:47:29