我有一个用于从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个项目显示在屏幕上,而不仅仅是第一个?
答案 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;
}