如何在 Android 中将 AutoCompleteTextView 与 RecyclerView.Adapter 一起使用,但不与 ArrayAdapter 一起使用 [英] How to use AutoCompleteTextView with RecyclerView.Adapter but not with ArrayAdapter in android

查看:33
本文介绍了如何在 Android 中将 AutoCompleteTextView 与 RecyclerView.Adapter 一起使用,但不与 ArrayAdapter 一起使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

I have a condition where auto suggest need to be implemented. For that purpose, I have been trying to use the custom RecyclerView.Adapter.But the problem is,AutoCompleteTextView seems to be made for BaseAdapter and its child class.

Therefore, the adapter is not accepted. Is there other way, I could use RecyclerView adapter with AutoCompleteTextView. Is the ArrayListAdapter or the BaseAdapter only solution for AutCompleteTextView?

推荐答案

AutoCompleteTextView 需要一个 ListAdapter,它也是 Filterable.您可以通过在 RecyclerView.Adapter 周围设置一个包装类来实现这一点,该类扩展了 BaseAdapter 并将调用委托给底层的 RecyclerView.Adapter.举个例子:

AutoCompleteTextView requires a ListAdapter that is also Filterable. You can implement this by having a wrapper class around a RecyclerView.Adapter that extends BaseAdapter and delegates calls to the underlying RecyclerView.Adapter. Here's an example:

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 上对此进行了测试,但它也适用于您的情况.

Now you can do mAutoCompleteTextView.setAdapter(new RecyclerBaseAdapter(mRecyclerViewAdapter)). I only tested this on a Spinner, but it should also work for your case.

这篇关于如何在 Android 中将 AutoCompleteTextView 与 RecyclerView.Adapter 一起使用,但不与 ArrayAdapter 一起使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆