从ArrayList中添加搜索结果,然后添加一项以上

时间:2018-08-24 07:22:15

标签: java android search arraylist

我有一个用于从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个元素的单词“小馅饼”。如何将所有5个项目显示在屏幕上,而不仅仅是第一个?

5 个答案:

答案 0 :(得分:0)

听起来像是问题在于您希望增强的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

答案 1 :(得分:0)

尝试一下

  

尝试为每个循环设置一个适配器,如果适配器大小为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;
}

答案 2 :(得分:0)

首先,您必须填写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;
}

答案 3 :(得分:0)

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

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;
}

答案 4 :(得分:0)

我已经从适配器的for和place之外删除了适配器的声明和实现,因为我认为您正在寻找的是一个包含所有搜索结果的数组列表。我还创建了一个新的变量“ flag”作为布尔值,因此如果数组中有元素,则可以返回true。

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