Filtrar un ListView

104 views
Skip to first unread message

Fernando Sigüenza

unread,
Mar 3, 2017, 1:01:40 AM3/3/17
to desarrollad...@googlegroups.com
Amigos como estan, tengo un list view al cual esta enlazado a un CursorAdapter

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 
Mi codigo es el siguiente
@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) {
Toast.makeText(getActivity(),query,Toast.LENGTH_LONG).show();
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
if (!TextUtils.isEmpty(newText)) {
mArticulosList.setFilterText(newText);
}
//searchView.setQuery("", false);
//searchView.setIconified(true);
return true;
}
});

super.onCreateOptionsMenu(menu,inflater);
}

Pero no m funciona cuano entra al onQueryTextChange tiene el valor digitado por el usuario pero no funciona, creo que le setFiltertext es solo para una lista simple.

En mi caso el Cursor tiene mas de un campo por ejemplo el codigo, nombre, precio de un articulo
Como podria hacer para usar el filtro que digita el usuario

mi cursoradapter es este


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 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);
}
}
Espero puedan ayudarme

Saludos
-
Fernando Siguenza

Maximiliano Aringoli

unread,
Mar 3, 2017, 5:10:03 AM3/3/17
to desarrollad...@googlegroups.com
Hola Fernando, te cuento que yo sobrescribo el método onPrepareOptionsMenu, te dejo lo que uso como ejemplo, espero te sirva. Saludos.

@Override
public void onPrepareOptionsMenu(Menu menu) {
MenuItem mSearchMenuItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) mSearchMenuItem.getActionView();

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
            return false;

}

@Override
public boolean onQueryTextChange(String newText) {
            aplicarFiltro(newText);
return false;
}
});
}

--
Para participar es necesario que leas detenidamente las normas del grupo: https://goo.gl/xeTRQm
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/desarrolladores-android.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/desarrolladores-android/CAPcTgmuBS%3D_pZQv0reiMOCrEhKaMd%2BOW%2By_8Lo%3D57SQUdjSbDw%40mail.gmail.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Fernando Sigüenza

unread,
Mar 4, 2017, 10:10:01 AM3/4/17
to desarrollad...@googlegroups.com, maxiar...@gmail.com
Gracias Maximiliano por reponde, es casi como lo tengo yo, lo que quiero saber es como haces para filtrar la lista  es decir que haces en el metodo
aplicarFiltro(newText);
Varia un poco el metodo que yo tengo al tuyo es porque yo lo tengo dentro de un fragmet y buscando vi que ahi se lo imprementa de la siguiente forma
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_sample, menu);
    super.onCreateOptionsMenu(menu,inflater);
}
Entonces hasta ahi veo que esta bien lo que no se es como mostrar solo los items que cumplan con el filtro digitado por el usuario la linea 
mArticulosList.setFilterText(newText);
no funciona

Saludos
Fernando

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrolladores-android@googlegroups.com.

--
Para participar es necesario que leas detenidamente las normas del grupo: https://goo.gl/xeTRQm
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a desarrolladores-android@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Fernando Siguenza
Reply all
Reply to author
Forward
0 new messages