## The adapter ##
public class Adaptador_Prestadores extends RecyclerView.Adapter<Adaptador_Prestadores.PrestadoraViewHolder> implements View.OnClickListener {
private final LayoutInflater inflater;
private List<Prestadora> list_prestadoras;
int pos;
Context context;
public Adaptador_Prestadores(Context context, List<Prestadora> list_prestadoras) {
inflater = LayoutInflater.from(context);
this.list_prestadoras = list_prestadoras;
this.context = context;
}
@Override
public PrestadoraViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View itemView = inflater.inflate(R.layout.search_filtro, parent, false);
PrestadoraViewHolder prestadora = new PrestadoraViewHolder(itemView);
return prestadora;
}
@Override
public void onBindViewHolder(PrestadoraViewHolder holder, int position) {
final Prestadora prestadora = this.list_prestadoras.get(position);
holder.bind(prestadora);
}
@Override
public int getItemCount() {
return this.list_prestadoras.size();
}
public void setPrestadoras(List<Prestadora> list_prestadoras) {
this.list_prestadoras = new ArrayList<>(list_prestadoras);
}
private OnRecyclerViewItemClickListener mOnItemClickListener = null;
public interface OnRecyclerViewItemClickListener {
void onItemClick(View view, int resId);
}
@Override
public void onClick(View v) {
if (mOnItemClickListener != null)
{
mOnItemClickListener.onItemClick(v, (Integer) v.getTag());
}
}
public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {
this.mOnItemClickListener = listener;
}
public Prestadora getPrestador(int pos)
{
return list_prestadoras.get(pos);
}
class PrestadoraViewHolder extends RecyclerView.ViewHolder{
private final TextView txt_prestadora;
public PrestadoraViewHolder(View itemView) {
super(itemView);
txt_prestadora = (TextView) itemView.findViewById(R.id.txt_filtro);
}
public void bind(Prestadora model) {
txt_prestadora.setText(model.getNombre());
}
}
public Prestadora removeItem(int position) {
final Prestadora localidad = this.list_prestadoras.remove(position);
notifyItemRemoved(position);
return localidad;
}
public void addItem(int position, Prestadora prestadora) {
this.list_prestadoras.add(position, prestadora);
notifyItemInserted(position);
}
public void moveItem(int fromPosition, int toPosition) {
final Prestadora model = this.list_prestadoras.remove(fromPosition);
this.list_prestadoras.add(toPosition, model);
notifyItemMoved(fromPosition, toPosition);
}
public void animateTo(List<Prestadora> list_localidades) {
applyAndAnimateRemovals(list_localidades);
applyAndAnimateAdditions(list_localidades);
applyAndAnimateMovedItems(list_localidades);
}
private void applyAndAnimateRemovals(List<Prestadora> list_filtros) {
for (int i = this.list_prestadoras.size() - 1; i >= 0; i--) {
final Prestadora filtro = this.list_prestadoras.get(i);
if (!list_filtros.contains(filtro)) {
removeItem(i);
}
}
}
private void applyAndAnimateAdditions(List<Prestadora> list_localidades) {
for (int i = 0, count = list_localidades.size(); i < count; i++) {
final Prestadora prestadora = list_localidades.get(i);
if (!this.list_prestadoras.contains(prestadora)) {
addItem(i, prestadora);
}
}
}
private void applyAndAnimateMovedItems(List<Prestadora> list_localidades) {
for (int toPosition = list_localidades.size() - 1; toPosition >= 0; toPosition--) {
final Prestadora localidad = list_localidades.get(toPosition);
final int fromPosition = list_localidades.indexOf(localidad);
if (fromPosition >= 0 && fromPosition != toPosition) {
moveItem(fromPosition, toPosition);
}
}
}
}
## Activity or fragment ##
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_nuevo_eturn, menu);
final MenuItem item = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String query) {
final List<Prestadora> filteredModelList = filter(dao.traerPrestadoras(localidad), query);
adaptador_prestador.animateTo(filteredModelList);
recycler_nuevo_eturn.scrollToPosition(0);
return true;
}
});
}
## XML Menu ##
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_search"
android:title="@string/action_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always"/>
</menu>