Intereting Posts
Имя приложения с надстрочным текстовым андроидом Поиск предложений из разных таблиц в разных действиях Цвет фона пульсации Android Fastboot и adb не работают с sudo Android M – проверить разрешение времени выполнения – как определить, проверен ли пользователь «Никогда не спрашивать снова»? Управление медиа-кнопками в Android 5.0 Lollipop Как разрешить это на Android Studio 3.0 Canary 1: Не удалось решить: com.google.android:android:2.3.1 Как остановить отслеживание GPS / местоположения, когда закончится моя активность? Почему я получаю эту ошибку, когда добавляю клиентскую библиотеку Google Translate в свой проект Android? Изображения, перекрывающиеся в gridview в android Как разрешить ошибку «ADB server not ACK»? Лучшая практика, позволяющая только приложению Android получать доступ к Rails API Android – изменение левого поля с помощью анимации Android Share Image Не очищает предварительный просмотр с ранее разделяемого элемента Когда несколько пользователей в android, является ANDROID_ID уникальным для каждого пользователя?

Как использовать метод publishResults () при расширении фильтров в Android?

Я работаю над файлом autocompletetextview, который будет работать с ключевой системой ценностей, и я пытаюсь выяснить, что мне нужно сделать, чтобы сделать работу publishResults, так как параметр param, передаваемый в publishResults, корректен в отладчике, однако я Не представляете, чем это должно соответствовать или как заставить его отображать результаты, может ли кто-нибудь помочь? Создание этого объекта находится в другом файле и выглядит следующим образом:

autoCompleteBox.setAdapter(new AutoCmpAdapter(this, android.R.layout.simple_dropdown_item_1line)); 

И остальная часть кода выглядит следующим образом:

 public class AutoCmpAdapter extends ArrayAdapter<String> implements Filterable { protected Filter filter; protected ArrayList<String> items; protected ArrayList<String> res; String lWds[] = { "HOMER", "TOM" }; String sWds[] = { "SIMPSON", "JONES" }; public AutoCmpAdapter(Context context, int textViewResourceId) { super(context, textViewResourceId); filter = new PhysFilter(); res = new ArrayList<String>(); } public Filter getFilter() { return filter; } private class PhysFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults f = new FilterResults(); res.clear(); if (constraint != null) { ArrayList<String> res = new ArrayList<String>(); for (int x = 0; x < sWds.length; x++) { if (sWds[x].toUpperCase().startsWith(constraint.toString().toUpperCase())) { res.add(lWds[x]); } } f.values = res.toArray(); f.count = res.size(); } return f; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { if (results.count > 0) { Log.println(Log.INFO, "Results", "FOUND"); notifyDataSetChanged(); } else { Log.println(Log.INFO, "Results", "-"); notifyDataSetInvalidated(); } } } } 

Прежде всего, не используйте массив String.

Для работы с парой ключевых значений вы можете настроить оператор If .. попробуйте это в своем onCreate

 AutoCompleteTextView mAutoCompleteTextView; ArrayList<String> lWds = new ArrayList<String>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mAutoCompleteTextView=(AutoCompleteTextView)findViewById(R.id.testAutoComplete); final AutoCmpAdapter adapter= new AutoCmpAdapter(this, android.R.layout.simple_dropdown_item_1line,lWds); mAutoCompleteTextView.setAdapter(adapter); mAutoCompleteTextView.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { adapter.getFilter().filter(s); } }); } 

И класс адаптера, например

  public class AutoCmpAdapter extends ArrayAdapter<String> implements Filterable { protected Filter filter; protected ArrayList<String> items; protected ArrayList<String> res; String sWds[] = { "SIMPSON", "JONES" }; public AutoCmpAdapter(Context context, int textViewResourceId,ArrayList<String> listData) { super(context, textViewResourceId,0,listData); filter = new PhysFilter(); res = new ArrayList<String>(); } public Filter getFilter() { return filter; } private class PhysFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults f = new FilterResults(); res.clear(); if (constraint != null) { ArrayList<String> res = new ArrayList<String>(); for (int x = 0; x < sWds.length; x++) { if (sWds[x].toUpperCase().contains(constraint.toString().toUpperCase())) { res.add(sWds[x]); } } f.values = res;//.toArray(); f.count = res.size(); } return f; } @SuppressWarnings("unchecked") @Override protected void publishResults(CharSequence constraint, FilterResults results) { if (results.count > 0) { Log.println(Log.INFO, "Results", "FOUND"); lWds.clear(); lWds.addAll((ArrayList<String>) results.values); notifyDataSetChanged(); } else { Log.println(Log.INFO, "Results", "-"); notifyDataSetInvalidated(); } } } }