【问题标题】:Adding search result from ArrayList more then one item从 ArrayList 添加搜索结果多于一项
【发布时间】:2018-08-24 07:22:14
【问题描述】:

我有一个用于从我的 ArratList 中搜索项目的代码

public boolean onQueryTextChange(String newText) {
    ArrayList<String> tempList = new ArrayList<>();
    for (ItemClass temp : nomenclatureList) {
        if (temp.getNomenclatureName().contains(newText)) {
            tempList.add(temp.getNomenclatureName());
            ArrayAdapter<String> adapter = new ArrayAdapter<> ItemListGKI.this, android.R.layout.simple_list_item_1, tempList);
            listView.setAdapter(adapter);

            return true;
        }
    }

    return true;
}

但是在执行这段代码时,我只看到一个结果值,不多。例如,我有 5 个包含“patties”一词的元素。如何将所有 5 个项目都显示在屏幕上,而不仅仅是第一个?

【问题讨论】:

    标签: java android search arraylist


    【解决方案1】:

    您只需将所有字母都变成小写,如下所示,

    public boolean onQueryTextChange(String newText) {
    boolean success = false;
    
    ArrayList<String> tempList = new ArrayList<>();
    for (ItemClass temp : nomenclatureList){
        if (temp.getNomenclatureName().toLowerCase().contains(newText.toLowerCase())) {
            tempList.add(temp.getNomenclatureName());
        }
    }
     ArrayAdapter<String> adapter = new ArrayAdapter<> ItemListGKI.this, android.R.layout.simple_list_item_1, tempList);
            listView.setAdapter(adapter);
            success = true;
    return success;
    }
    

    【讨论】:

    • 很高兴听到它有效。如果有用,请给您投票。谢谢..:-) 快乐编码:-)
    【解决方案2】:

    试试这个,

    尝试在每个循环之后设置适配器,如果适配器大小为0,您也可以return false

    public boolean onQueryTextChange(String newText) {
    
        ArrayList<String> tempList = new ArrayList<>();
        for(ItemClass temp : nomenclatureList){
            if(temp.getNomenclatureName().contains(newText)){
                tempList.add(temp.getNomenclatureName());
            }
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<> ItemListGKI.this, android.R.layout.simple_list_item_1, tempList);
        listView.setAdapter(adapter);
        return true;
    }
    

    【讨论】:

      【解决方案3】:

      首先你必须填充 tempList,最后设置适配器,所以将它移到循环之后并删除循环中的 return 语句:

      ArrayAdapter<String> adapter = new ArrayAdapter<> ItemListGKI.this, android.R.layout.simple_list_item_1, tempList);
      listView.setAdapter(adapter);
      

      原来如此:

      public boolean onQueryTextChange(String newText) {
          ArrayList<String> tempList = new ArrayList<>();
          for(ItemClass temp : nomenclatureList){
              if(temp.getNomenclatureName().contains(newText)){
                  tempList.add(temp.getNomenclatureName());
              }
          }
          ArrayAdapter<String> adapter = new ArrayAdapter<> ItemListGKI.this, android.R.layout.simple_list_item_1, tempList);
          listView.setAdapter(adapter);
          return true;
      }
      

      【讨论】:

        【解决方案4】:

        听起来问题是您希望增强的 for 循环完全执行,而不是在第一次迭代时返回。此重构建议单独迭代以填充列表,然后进行单个分配以创建 ArrayAdapter 并将其分配给 ListView

        public boolean onQueryTextChange(String newText) {
            ArrayList<String> tempList = new ArrayList<>();
            for (ItemClass temp : nomenclatureList){
                if (temp.getNomenclatureName().contains(newText)) {
                    tempList.add(temp.getNomenclatureName());
                }
            }
        
            ArrayAdapter<String> adapter = new ArrayAdapter<> ItemListGKI.this, android.R.layout.simple_list_item_1, tempList);
            listView.setAdapter(adapter);
        
            return true;
        }
        

        请注意,我不明白为什么此方法必须返回 boolean。它正在改变你的视图状态,所以也可能是void

        【讨论】:

          猜你喜欢
          • 2015-04-12
          • 1970-01-01
          • 2014-08-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多