我有一个代码,用于从我的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
.