Формировать список адресов на лету в 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);

}

Ответы (0 шт):