Saltar al contenido

GetFilter personalizado en ArrayAdapter personalizado en Android

Solución:

Tiene un problema, principalmente porque está utilizando un objeto personalizado. Si pasa un valor String o int al adaptador de matriz, sabrá cómo filtrarlo. Pero si pasa la implementación del filtro predeterminado de objeto personalizado, no tendrá idea de cómo lidiar con eso.

Aunque no está claro qué está intentando hacer en su filtro, le recomiendo que siga los pasos.

  1. Implementación adecuada de ListTO, aunque no tiene nada que ver con tu objetivo en este momento
  2. Implementar filtro personalizado
  3. devuelve tu filtro

Implementar filtro personalizado

Lo primero que tienes que hacer es implements Filterable desde su adaptador de matriz.

En segundo lugar, proporcione la implementación de su Filter

Filter myFilter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
         FilterResults filterResults = new FilterResults();   
         ArrayList<ListTO> tempList=new ArrayList<ListTO>();
         //constraint is the result from text you want to filter against. 
         //objects is your data set you will filter from
         if(constraint != null && objects!=null) {
             int length=objects.size();
             int i=0;
                while(i<length){
                    ListTO item=objects.get(i);
                    //do whatever you wanna do here
                    //adding result set output array     

                    tempList.add(item);

                    i++;
                }
                //following two lines is very important
                //as publish result can only take FilterResults objects
                filterResults.values = tempList;
                filterResults.count = tempList.size();
          }
          return filterResults;
      }

      @SuppressWarnings("unchecked")
      @Override
      protected void publishResults(CharSequence contraint, FilterResults results) {
          objects = (ArrayList<ListTO>) results.values;
          if (results.count > 0) {
           notifyDataSetChanged();
          } else {
              notifyDataSetInvalidated();
          }  
      }
     };

Último paso,

@Override
     public Filter getFilter() {
        return myFilter;
    }

No es necesario escribir un adaptador de matriz. escribe un método toString () que debería devolver el valor de nombre de archivo.

Igual que

public class ListTO {

    public int Id;
    public String FileName;
    public String FileUri;

    public ListTO(int id, String fileName, String fileUri) {

        Id = id;
        FileName = fileName;
        FileUri = fileUri;

    }

    public String toString(){
        return FileName
    }

}

Necesita anular el getFilter() en el Adaptador y proporcione su propio filtro. Eche un vistazo a este ejemplo filtrable para ver una implementación real.

Agregue lo siguiente getFilter() código a tu FilterableAdapter class y rellénelo con su filtrado:

/* (non-Javadoc)
 * @see android.widget.ArrayAdapter#getFilter()
 */
@Override
public Filter getFilter() {
    return new Filter() {

        /* (non-Javadoc)
         * @see android.widget.Filter#performFiltering(java.lang.CharSequence)
         */
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            // TODO Auto-generated method stub
            /*
             * Here, you take the constraint and let it run against the array
             * You return the result in the object of FilterResults in a form
             * you can read later in publichResults.
             */
            return null;
        }

        /* (non-Javadoc)
         * @see android.widget.Filter#publishResults(java.lang.CharSequence, android.widget.Filter.FilterResults)
         */
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            // TODO Auto-generated method stub
            /*
             * Here, you take the result, put it into Adapters array
             * and inform about the the change in data.
             */
        }

    };
}

Agregué sugerencias sobre qué hacer en los comentarios.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *