我有一个需要实现自动建议的条件。为此,我一直在尝试使用自定义的RecyclerView.Adapter。但问题是,AutoCompleteTextView似乎是为BaseAdapter及其子类而设计的。
因此,该适配器无法被接受。是否有其他方法可以将RecyclerView适配器与AutoCompleteTextView一起使用?ArrayListAdapter或BaseAdapter是AutCompleteTextView的唯一解决方案吗?
AutoCompleteTextView
需要一个同时也实现了 Filterable
接口的 ListAdapter
。您可以通过使用一个围绕着扩展了 BaseAdapter
的 RecyclerView.Adapter
的包装器类,并委托对底层 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
上测试过,但它也应该适用于你的情况。