|
||
|
|
|
|||||||
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
|
Herramientas |
|
#1
|
||||
|
||||
|
Filtrar elementos de un ListView
Vereis, tengo una listview con un adapter personalizado, texto1, texto2 y un boton. Los textview texto 1 y texto 2 cargan una lista de nombres y descripciones desde un array cada uno y he implementado la busqueda en la actionbar para poder filtrar los elementos a mostrar, me funciona la busqueda pero no correctamente, por ejemplo al escribir una "a" en la actionbar me muestra algunos elementos de la lista, no todos pero algunos ni contienen esa letra por lo que no se corresponden con la busqueda, lo que quiero es que al escribir todo el nombre, por ejemplo me muestre solo los elementos que contengan ese nombre. Hay manera de crear un getFilter() personalizado?
__________________
|
|
|
|
#2
|
||||
|
||||
|
Saludos compañero!
Lo primero comentarte que meter un boton en un list view a veces no suele ser util bastaria con añadir un listener al list view para obtener el view que esta en esa posicion. igualmente nos centramos en tu problema. Normalmente un post sin el codigo no vale de nada. yo me aseguraria de que filtras los elementos antes de añadirlos al list view y refrescas el mismo o a traves de alguno de los filtros mediante un vistazo al codigo comprobar donde puede surgir el error(Normalmente con un debug suele bastar) Asique dicho esto quedo a la espera de que publiques algo de codigo paara poder ayudarte mejor.
__________________
![]() Es de bien nacido ser agradecido. Dale a gracias si te serví de ayuda!
|
| Gracias de parte de: | ||
|
#3
|
||||
|
||||
|
Gracias SpliterMelon, lo del boton en el listview es porque es una lista de sonidos con un nombre, la descripcion y el boton para reproducir el sonido, te comento lo que tengo.
Tengo un ArrayAdapter personalizado con los textos y el boton, en el onCreate tengo este codigo para montar los elementos en el listview: Código:
CustomList adapter = new CustomList(Actividad1.this, nombre, frases, boton); // filtrar los campos con esta etiqueta
list = (ListView) findViewById(R.id.lista1);
((CustomList) adapter).setCustomButtonListner(Actividad1.this);
list.setAdapter(adapter);
Código:
public class CustomList extends ArrayAdapter<String> implements Filterable {
customButtonListener customListner;
private final Activity context;
private final String[] nom;
private final String[] frase;
private final Button boton;
public void setCustomButtonListner(customButtonListener listener) {
this.customListner = listener;
}
public CustomList(Activity context, String[] nom, String[] frase,Button boton) {
super(context, R.layout.adapter_doble, frase);
this.context = context;
this.nom = nom;
this.frase = frase;
this.boton = boton;
}
@override
public long getItemId(int position) {
return position;
}
@override
public View getView(final int position, View convertView,
ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
convertView = inflater.inflate(R.layout.adapter_doble, null);
viewHolder = new ViewHolder();
viewHolder.nom = (TextView) convertView.findViewById(R.id.nombre1);
viewHolder.frase = (TextView) convertView.findViewById(R.id.frase1);
viewHolder.boton = (Button) convertView.findViewById(R.id.boton1);
convertView.setTag(viewHolder);
registerForContextMenu(viewHolder.boton);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
final String temp = getItem(position);
viewHolder.nom.setText(nombre[position]);
viewHolder.frase.setText(frases[position]);
viewHolder.boton.setOnClickListener(new OnClickListener() {
@override
public void onClick(View v) {
if (customListner != null) {
customListner.onButtonClickListner(position, temp);
mp = MediaPlayer.create(Actividad1.this,sonidos[position]);
mp.start();
}
}
});
return convertView;
}
public Filter getFilter() {
return null;
}
public class ViewHolder {
TextView nom;
TextView frase;
Button boton;
}
}
Código:
@override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_secciones, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.buscar).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setQueryHint(getString(R.string.search_hint)); SearchView.OnQueryTextListener textChangeListener = new SearchView.OnQueryTextListener() { @override public boolean onQueryTextChange(String newText) { adapter.getFilter().filter(newText); return true; } @override public boolean onQueryTextSubmit(String query) { adapter.getFilter().filter(query); return true; } }; searchView.setOnQueryTextListener(textChangeListener); return super.onCreateOptionsMenu(menu); }
__________________
|
|
#4
|
||||
|
||||
|
Alguien sabe como filtrar los resultados de la lista correctamente?
__________________
Última edición por kaiser75 Día 28/12/15 a las 19:59:39. |
|
#5
|
||||
|
||||
|
Alguna ayuda para poder crear una logica personalizada para poder filtrar la lista correctamente?
__________________
|
|
#6
|
||||
|
||||
|
Debes implementar tu propio filtro en el método getFilter dentro de la correspondiente implementación del Adapter. Ahí es donde debe ir toda la lógica de filtrado: filtrar por un texto u otro, o incluso por ambos.
Haciendo una búsqueda rápida en StackOverflow he encontrado un ejemplo que te puede servir de ayuda http://stackoverflow.com/a/19301216
|
![]() |
Estás aquí
|
||||||
|
||||||