如何在RecyclerView.Adapter中使用AutoCompleteTextView,而在android中使用ArrayAdapter

Ami*_*ari 13 autocompletetextview android-recyclerview

我有条件需要实施自动建议.为此,我一直在尝试使用自定义的RecyclerView.Adapter.但问题是,AutoCompleteTextView似乎是针对BaseAdapter及其子类.

因此,不接受适配器.还有其他方法,我可以使用RecyclerView适配器与AutoCompleteTextView.是否为AutCompleteTextView的ArrayListAdapter或BaseAdapter唯一解决方案?

che*_*ork 9

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在你可以做到mAutoCompleteTextView.setAdapter(new RecyclerBaseAdapter(mRecyclerViewAdapter)).我只测试了这个Spinner,但它也适用于你的情况.

  • 逐字使用此代码,我只能让构造函数执行,没有其他方法被输入,我的自动完成文本视图中没有任何显示 (2认同)