Ich versuche gerade, ein SearchView zu implementieren, aber die angezeigten Suchergebnisse ändern sich nur für die erste Suche, alles andere, das ich in SearchView eingib, wird ignoriert.Wie wird nach einer Liste von Objekten gesucht, die in einem RecyclerView angezeigt werden?
Hier ist mein Code für die Suche in meinem MainActivity.java
:
testList = Arrays.asList(new TestItem("aw"), new TestItem("aa"), new TestItem("w"));
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.test_menu, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(this);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onQueryTextChange(String newText) {
List<TestItem> result = new ArrayList<>();
for(TestItem t: testList) {
if(t.getName().contains(newText) {
result.add(t);
}
}
adapter.changeList(result);
return true;
}
adapter.changeList:
public void changeList(List<TestItem> newList) {
this.list = new ArrayList<>(newList);
}
onQueryTextChange nach jeder Textänderung aufgerufen wird, aber das Suchergebnis wird nur einmal gezeigt. Bei der Eingabe von a
und Enter
zeigt der RecyclerView aw
und aa
(ist es normal, um Enter für onQueryTextChange
zu starten?), Aber wenn ich dann aa
eingeben, bleiben die angezeigten Elemente gleich.
Vielen Dank für Ihre Hilfe. Ihre Lösung funktioniert für mich, wenn ich 'filterResults.values = categoriesMain.clone();' durch 'filterResults.values = categoriesMain' ersetze. – sininen