如何在Android中将AutoCompleteTextView与RecyclerView.Adapter一起使用而不与ArrayAdapter一起使用 [英] How to use AutoCompleteTextView with RecyclerView.Adapter but not with ArrayAdapter in android
问题描述
我有一个条件,需要执行自动建议.为此,我一直在尝试使用自定义的RecyclerView.Adapter.但是问题是,AutoCompleteTextView似乎是为BaseAdapter及其子类制作的. 因此,不接受适配器.还有其他方法,我可以将RecyclerView适配器与AutoCompleteTextView一起使用.是AutCompleteTextView的ArrayListAdapter或BaseAdapter唯一解决方案吗?
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屋!