Как изменить Android SearchableSpinner для поиска нескольких слов в любом порядкеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как изменить Android SearchableSpinner для поиска нескольких слов в любом порядке

Сообщение Anonymous »

Я создаю приложение для Android на Java, которое использует SearchableSpinner из com.github.miteshpithadiya:SearchableSpinner:master.
Я хотел бы изменить его, чтобы оно также могло искать несколько слов в одной и той же строке в любом порядке. Например, если бы я искал слова «красный грейпфрут» в списке продуктов, Spinner был бы сведен к следующим вариантам:
  • "Грейпфрут, розовый или красный, все регионы, сырой"
  • "Грейпфрут, розовый или красный, Калифорния или Аризона, сырой"
  • "Грейпфрут, розовый или красный, Флорида, raw"
Вот XML: А в MainActivity я добавил пользовательский ArrayAdapter к SearchableSpinner (я поставил «getApplicationContext()» вместо «this», потому что он находится в другом блоке):

Код: Выделить всё

    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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»