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

Respuesta
 
Herramientas
  #1  
Viejo 04/12/15, 17:15:24
Array

[xs_avatar]
kaiser75 kaiser75 no está en línea
Miembro del foro
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
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?
__________________
Responder Con Cita


  #2  
Viejo 10/12/15, 18:09:45
Array

[xs_avatar]
SpliterMelon SpliterMelon no está en línea
Miembro del foro
 
Fecha de registro: ago 2013
Localización: Madrid
Mensajes: 476
Modelo de smartphone: Bq Aquaris 5, Iphone5C, LG G3
Tu operador: Vodafone
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!
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 10/12/15, 19:27:38
Array

[xs_avatar]
kaiser75 kaiser75 no está en línea
Miembro del foro
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
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);
despues este es el Adapter, en la misma Actividad1
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;
        }

    }
y este es el menu que muestra el campo de busqueda en la ActionBar
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);      

    }
Asi me funciona correctamente, lo unico que no se como crear el filtro personalizado para filtrar los elementos solo con el texto "nombre", al hacer la busqueda me filtra la lista pero los elementos que se muestran en la lista no se corresponden con lo que se escribe en la busqueda.
__________________
Responder Con Cita
  #4  
Viejo 16/12/15, 11:59:46
Array

[xs_avatar]
kaiser75 kaiser75 no está en línea
Miembro del foro
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
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.
Responder Con Cita
  #5  
Viejo 28/12/15, 20:00:50
Array

[xs_avatar]
kaiser75 kaiser75 no está en línea
Miembro del foro
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Alguna ayuda para poder crear una logica personalizada para poder filtrar la lista correctamente?
__________________
Responder Con Cita
  #6  
Viejo 28/12/15, 21:49:44
Array

[xs_avatar]
beta tester beta tester no está en línea
Miembro del foro
 
Fecha de registro: mar 2015
Mensajes: 166
Modelo de smartphone: OnePlus 5

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

Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 02:22:45 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2026 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /