Intereting Posts
Уникальный идентификатор Android Переменные в XML-ресурсах – передают значения от родителя к дочернему GPS-калибровка для Android Каков переход по умолчанию между действиями в Android 4.0 (API 14+) Как использовать задачуCheckCheck для запуска тестов на удаленных устройствах Использование Gstreamer или ffmpeg для создания клиента rtsp на Android Как получить основной цвет материальной темы в xml drawable? Как определить, является ли сеть (настроенная как) мобильной точкой доступа на Android? Поддерживает ли Acer Iconia Tab A500 режим аксессуаров? Как преобразовать файл jar в формат apk? Поиск местоположения пикселов элемента Listview, кажется, возвращает неправильное значение Плагин cordova fcm на Android-данные.wasTapped не работает Как включить события отбрасывания поверхности на logcat Создание SearchView, который выглядит как руководство по разработке материалов Проверка статуса сообщения GCM

Как использовать метод 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(); } } } }