Формировать список адресов на лету в autocompletetextview android
Есть компонент autoCompleteTextView. задача состоит в том, чтобы введенный текст отправлялся в mapkit yandex, в ответ получал бы названия улиц, домов и тд. по типу автозавершения. полагаю нужен свой адаптер со своим фильтром, но результат сервера получаю коллбеком и тут застрял в разработке.
public class AutoCompleteAdapter extends BaseAdapter implements Filterable {
private static final int MAX_RESULTS = 10;
private final Context mContext;
private List<String> mResults;
public AutoCompleteAdapter(Context context) {
mContext = context;
mResults = new ArrayList<String>();
}
@Override
public int getCount() {
return mResults.size();
}
@Override
public String getItem(int index) {
return mResults.get(index);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);
convertView = inflater.inflate(R.layout.simple_dropdown_item_2line, parent, false);
}
String str = getItem(position);
((TextView) convertView.findViewById(R.id.text1)).setText(str);
return convertView;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
List<String> string = query(mContext, constraint.toString());
// Assign the data to the FilterResults
filterResults.values = string;
filterResults.count = string.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
mResults = (List<String>) results.values;
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}};
return filter;
}
private List<String> query(String str) {
List<String> list = new ArrayList<>();
searchManager = SearchFactory.getInstance().createSearchManager(SearchManagerType.COMBINED);
suggestSession = searchManager.createSuggestSession();
suggestSession.suggest(str, BOUNDING_BOX, SEARCH_OPTIONS, new SuggestSession.SuggestListener() {
@Override
public void onResponse(@NonNull List<SuggestItem> list) {
return list; // Беда
}
@Override
public void onError(@NonNull Error error) {
return null;
}
});
}
private SearchManager searchManager;
private SuggestSession suggestSession;
private final Point CENTER = new Point(55.75, 37.62);
private final double BOX_SIZE = 0.2;
private final BoundingBox BOUNDING_BOX = new BoundingBox(
new Point(CENTER.getLatitude() - BOX_SIZE, CENTER.getLongitude() - BOX_SIZE),
new Point(CENTER.getLatitude() + BOX_SIZE, CENTER.getLongitude() + BOX_SIZE));
private final SuggestOptions SEARCH_OPTIONS = new SuggestOptions().setSuggestTypes(
SuggestType.GEO.value |
SuggestType.BIZ.value |
SuggestType.TRANSIT.value);
}
