En una actividad dentro de un fragmento tengo en el toolbar el serchview implementado
Lo que quiero es que cuando digite cualquier letra dentro del serchview se vaya filtrando el listview y muestre solo las coincidencias de lo que digita el usuario
public class ArticulosFragment extends Fragment {
private static final String ARG_PRECIO_ID = "precioId";
private OperacionesBaseDatos mOpebase;
private ListView mArticulosList;
private ArticulosCursorAdapter mArticulosAdapter;
private String mPrecioId;
public ArticulosFragment() {
// Required empty public constructor
}
public static ArticulosFragment newInstance(String precioId) {
ArticulosFragment fragment = new ArticulosFragment();
Bundle args = new Bundle();
args.putString(ARG_PRECIO_ID, precioId);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//obtenemos el codigo del precio seleccionado para los items
if (getArguments() != null) {
mPrecioId = getArguments().getString(ARG_PRECIO_ID);
if (mPrecioId==null) {
mPrecioId=getResources().getString(R.string.precio_default);
}
}
//habilitamos el toolbar
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_articulos, container, false);
//referencias UI
mArticulosList = (ListView) root.findViewById(R.id.articulos_list);
mArticulosAdapter = new ArticulosCursorAdapter(getActivity(),null);
mArticulosList.setAdapter(mArticulosAdapter);
// Eventos
mArticulosList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Cursor currentItem = (Cursor) mArticulosAdapter.getItem(i);
String currentItemId = currentItem.getString(currentItem.getColumnIndex(ContratoPedidos.Productos.ID));
String currentItemCod = currentItem.getString(currentItem.getColumnIndex(ContratoPedidos.Productos.CODIGO));
Float currentPrecio = currentItem.getFloat(currentItem.getColumnIndex(ContratoPedidos.Productos.PRECIO));
ShowCantidadItems(currentItemId,currentItemCod,currentPrecio);
}
});
LoadArticulos();
return root;
}
//
//Metodo para revisar el texto del filtro
//
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
//super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.menu_buscar_articulos,menu);
final MenuItem searchItem = menu.findItem(R.id.mnu_articulo_buscar);
final SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setQueryHint("Buscar Articulo");
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
@Override
public boolean onQueryTextSubmit(String query) {
query=query.toUpperCase();
mArticulosAdapter.getFilter().filter(query);
mArticulosAdapter.notifyDataSetChanged();
Toast.makeText(getActivity(),query,Toast.LENGTH_LONG).show();
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
if (!TextUtils.isEmpty(newText)) {
AplicarFiltro(newText);
//mArticulosList.setFilterText(newText);
//mArticulosAdapter.getFilter().filter(newText);
//mArticulosList.setAdapter(mArticulosAdapter);
}
//searchView.setQuery("", false);
//searchView.setIconified(true);
return false;
}
});
super.onCreateOptionsMenu(menu,inflater);
}
private void AplicarFiltro(String newText) {
ArticulosCursorAdapter adapter = (ArticulosCursorAdapter) mArticulosList.getAdapter();
//adapter.filter(newText);
}
}
Dentro del cursor adapter tengo
public class ArticulosCursorAdapter extends CursorAdapter {
public ArticulosCursorAdapter(Context context, Cursor c) {
super(context, c, 0);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
return inflater.inflate(R.layout.list_item_articulo,parent,false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
//referencias UI
TextView articuloText = (TextView) view.findViewById(R.id.tv_articulo);
TextView cantidadText = (TextView) view.findViewById(R.id.tv_cantidad_articulo);
TextView precioText = (TextView) view.findViewById(R.id.tv_precio_articulo);
//get valores
String codigo=cursor.getString(cursor.getColumnIndex(ContratoPedidos.Productos.CODIGO));
String articulo=cursor.getString(cursor.getColumnIndex(ContratoPedidos.Productos.NOMBRE));
String existencia=cursor.getString(cursor.getColumnIndex(ContratoPedidos.Productos.SALDO));
String precio=cursor.getString(cursor.getColumnIndex(ContratoPedidos.Productos.PRECIO));
//setup
articuloText.setText(articulo);
cantidadText.setText(existencia);
precioText.setText(precio);
}
}
En mi caso el Cursor tiene mas de un campo por ejemplo el codigo, nombre, precio de un articulo