作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个需要实现自动建议的情况。为此,我一直在尝试使用自定义的 RecyclerView.Adapter。但问题是,AutoCompleteTextView 似乎是为 BaseAdapter 及其子类制作的。
因此,不接受适配器。还有其他方法,我可以将 RecyclerView 适配器与 AutoCompleteTextView 一起使用。 ArrayListAdapter 或 BaseAdapter 是 AutCompleteTextView 的唯一解决方案吗?
最佳答案
AutoCompleteTextView
需要 ListAdapter
那也是Filterable
.您可以通过在 RecyclerView.Adapter
周围有一个包装类来实现这一点。扩展 BaseAdapter
并将调用委托(delegate)给底层 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
上进行了测试,但它也应该适用于您的情况。
关于android-recyclerview - 如何在 android 中将 AutoCompleteTextView 与 RecyclerView.Adapter 一起使用,但不与 ArrayAdapter 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33711398/
我是一名优秀的程序员,十分优秀!