Как использовать AutoCompleteTextView с RecyclerView.Adapter, но не с ArrayAdapter в android

У меня есть условие, в котором автопредложение должно быть реализовано. Для этой цели я пытаюсь использовать пользовательский RecyclerView.Adapter. Но проблема заключается в том, что AutoCompleteTextView создается для BaseAdapter и его дочернего класса.

Поэтому адаптер не принимается. Есть ли другой способ, я мог бы использовать адаптер RecyclerView с AutoCompleteTextView. Является ли решение ArrayListAdapter или базовым адаптером для AutCompleteTextView?

Ответ 1

AutoCompleteTextView требуется ListAdapter, также Filterable. Вы можете реализовать это, имея класс оболочки вокруг RecyclerView.Adapter, который расширяет BaseAdapter и делегирует вызовы в базовый RecyclerView.Adapter. Вот пример:

public class RecyclerBaseAdapter<VH extends RecyclerView.ViewHolder> 
    extends BaseAdapter implements Filterable {

    private final RecyclerView.Adapter<VH> mAdapter;

    public RecyclerBaseAdapter(RecyclerView.Adapter<VH> adapter) {
        mAdapter = adapter;
    }

    @Override
    public int getItemViewType(int position) {
        return mAdapter.getItemViewType(position);
    }

    @Override
    public int getCount() {
        return mAdapter.getItemCount();
    }

    @Override
    public Object getItem(int position) {
        // not supported
        return null;
    }

    @Override
    public long getItemId(int position) {
        return mAdapter.getItemId(position);
    }

    @SuppressWarnings("unchecked")
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        VH holder;
        if (convertView == null) {
            holder = mAdapter.createViewHolder(parent, getItemViewType(position));
            convertView = holder.itemView;
            convertView.setTag(holder);
        } else {
            holder = (VH) convertView.getTag();
        }
        mAdapter.bindViewHolder(holder, position);
        return holder.itemView;
    }

    @Override
    public Filter getFilter() {
        // TODO: return a real filter
        return null;
    }
}

Теперь вы можете сделать mAutoCompleteTextView.setAdapter(new RecyclerBaseAdapter(mRecyclerViewAdapter)). Я тестировал это только на Spinner, но он также должен работать для вашего дела.