Я хотел бы изменить его, чтобы оно также могло искать несколько слов в одной и той же строке в любом порядке. Например, если бы я искал слова «красный грейпфрут» в списке продуктов, Spinner был бы сведен к следующим вариантам:
- "Грейпфрут, розовый или красный, все регионы, сырой"
- "Грейпфрут, розовый или красный, Калифорния или Аризона, сырой"
- "Грейпфрут, розовый или красный, Флорида, raw"
Код: Выделить всё
Код: Выделить всё
SearchableSpinner searchableSpinner = findViewById(R.id.spinner_view);
String[] dropDownArray = foodsMap.values().toArray(new String[0]);
ArrayAdapter adapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_spinner_item, dropDownArray) {
@Override
public Filter getFilter() {
return new android.widget.Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
List suggestions = new ArrayList();
if (constraint == null || constraint.length() == 0) {
suggestions.addAll(items);
} else {
String[] queryWords = constraint.toString().toLowerCase().split(" ");
for (String item : items) {
String lowerItem = item.toLowerCase();
boolean allWordsMatch = true;
for (String word : queryWords) {
if (!lowerItem.contains(word)) {
allWordsMatch = false;
break;
}
}
if (allWordsMatch) {
suggestions.add(item);
}
}
}
results.values = suggestions;
results.count = suggestions.size();
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
clear();
if (results.count > 0) {
addAll((List) results.values);
notifyDataSetChanged();
}
}
};
}
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
searchableSpinner.setAdapter(adapter);
Нужно ли что-то еще переопределить или добавить?
Подробнее здесь: https://stackoverflow.com/questions/798 ... n-any-orde
Мобильная версия