2012-02-23 12 views
5

Quiero filtrar mi listView usando una caja EditText y usando la función del adaptador getFilter(). Funciona bien hasta que coloque un carácter de espacio en el cuadro de texto.Filtro para android ListView - Space Character

Editar: Es una SimpleAdapter no ArrayAdapter

Si mi lista contiene estas palabras: { "Apple", "Banana", "Red Apple"} Si escribo "manzana" se volverá toda la elementos que contienen la palabra manzana en él (manzana y manzana roja). Si escribo "apple" no devolverá nada.

¿Alguna idea? Aquí está el código:

searchBox = (EditText) findViewById(R.id.searchBox); 

searchBox.addTextChangedListener(filterTextWatcher); 

y

private TextWatcher filterTextWatcher = new TextWatcher() { 

public void onTextChanged(CharSequence s, int start, int before, int count) { 
    // TODO Auto-generated method stub   
} 

public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
    // TODO Auto-generated method stub   
} 

public void afterTextChanged(Editable s) { 
    // TODO Auto-generated method stub 
    myAdapter.getFilter().filter(s.toString()); 
} 
}; 
+0

¿Alguna vez descubrió esto? –

+0

No lo siento. Creo que la solución podría ser hacer tu propio adaptador basado en un ArrayAdapter, pero no lo intenté (dejé de trabajar en ese proyecto). – Chris911

+0

@CaptainProg ¿Qué tipo de respuesta estás buscando? Con la pregunta original planteada con 'trim()' es la mejor respuesta. – Sam

Respuesta

2

Si la funcionalidad de filtrado de SimpleAdapter no cumple sus requisitos de filtrado, tendrá que reemplazar el SimpleAdapter e implemente sus propios requisitos de filtrado.

Esto requiere una gran cantidad de código, ya que el filtro en SimpleAdapter está utilizando una gran cantidad de objetos privados, que tendrá que replicar. Lo mismo aplica para ArrayAdapter

Afortunadamente, alguien más (@ uʍop ǝpısdn) ya fue al proceso, escribió el código y lo puso a disposición de la comunidad.

Puede encontrar el enlace al blog here que incluye cómo usar ejemplos y el código en here.

Atentamente.

+0

Creo que esta es la única solución válida. Ha pasado un tiempo desde que hice esta pregunta y ya no trabajo en ese proyecto, pero intentaré validarlo. Gracias. – Chris911

+0

Exactamente. El problema descrito surge debido a esta línea: 'String [] words = str.split (" ");' en la clase ** SimpleAdapter.SimpleFilter **, que simplemente omite espacios de sus cadenas iniciales, dividiéndolos en palabras. –

+0

@Luis Tengo un problema similar y he publicado una pregunta http: // stackoverflow.com/questions/39573432/get-filter-does-not-work-for-space-in-android Espero que pueda ayudar. – AndroidNewBee

2

Pruebe con esto:

myAdapter.getFilter().filter(s.toString().trim()); 
+0

Esto solo funciona parcialmente porque elimina espacios, pero digamos que escribo "Red Ap", lo recortará a "RedAp" y no hay palabras en mi selección que contengan "RedAp". Así que, básicamente, soluciona el problema si pongo un "" antes o después de una palabra, pero no da el resultado que quiero. – Chris911

+2

@ Chris911: en realidad no significará. Recorte significa que simplemente elimina el espacio antes y después de que el texto comience y se detenga respectivamente. Así que si escribe "manzana", entonces lo recortará para que sea "manzana", pero si escribe " red ap ", lo tomará como lo tiene. ¿Lo entendió? – Hiral

+0

Gracias por la explicación Hiral pero eso aún no soluciona el problema. Estoy empezando a pensar que la única forma de hacerlo es implementar mi propio adaptador con mi propio filtro. – Chris911