从 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 个项目都显示在屏幕上,而不仅仅是第一个项目?

您只需将所有字母设置为小写,如下所示,

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

试试这个,

尝试为每个循环设置适配器后,您也可以return false适配器大小是否为 0

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

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

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