android-recyclerview - holder - recyclerview get item position
Cómo usar AutoCompleteTextView con RecyclerView.Adapter pero no con ArrayAdapter en android (1)
Tengo una condición donde la sugerencia automática debe implementarse. Para ese propósito, he estado tratando de usar el RecyclerView.Adapter personalizado. Pero el problema es que parece que AutoCompleteTextView está hecho para BaseAdapter y su clase secundaria.
Por lo tanto, el adaptador no es aceptado. ¿Hay alguna otra manera? Podría usar el adaptador RecyclerView con AutoCompleteTextView. ¿La solución ArrayListAdapter o BaseAdapter es la única para AutCompleteTextView?
AutoCompleteTextView
requiere un ListAdapter
que también sea ListAdapter
. Puede implementar esto teniendo una clase contenedora alrededor de un RecyclerView.Adapter
que amplíe BaseAdapter
y delegue llamadas al RecyclerView.Adapter
subyacente. Aquí hay un ejemplo:
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;
}
}
Ahora puede hacer mAutoCompleteTextView.setAdapter(new RecyclerBaseAdapter(mRecyclerViewAdapter))
. Solo probé esto en un Spinner
, pero también debería funcionar para tu caso.