2012-02-23 9 views
5

Desidero filtrare il mio listView utilizzando una casella EditText e utilizzando la funzione adattatore getFilter(). Funziona perfettamente finché non inserisco un carattere di spazio nella casella di testo.Filtro per Android ListView - Spazio Character

Edit: E 'un SimpleAdapter non ArrayAdapter

Se il mio elenco contiene queste parole: { "Apple", "Banana", "Mela Rossa"} Se scriv "mela" restituirà tutte le articoli contenenti la parola mela in essa (mela e mela rossa). Se digito "mela" non restituirà nulla.

Qualche idea? Ecco il codice:

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

searchBox.addTextChangedListener(filterTextWatcher); 

e

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

Hai mai immaginato questo? –

+0

Non mi dispiace. Penso che la soluzione potrebbe essere quella di creare il tuo adattatore basato su un ArrayAdapter ma non ho provato (smesso di lavorare su quel progetto). – Chris911

+0

@CaptainProg Che tipo di risposta stai cercando? Con la domanda originale posta usando 'trim()' è la migliore risposta. – Sam

risposta

2

Se la funzionalità di filtro da SimpleAdapter non soddisfa le vostre esigenze di filtraggio, è necessario eseguire l'override del SimpleAdapter e implementa i tuoi requisiti di filtraggio.

Ciò richiede molto codice, poiché Filtro in SimpleAdapter utilizza molti oggetti privati, che è necessario replicare. Lo stesso si adatta a ArrayAdapter

Fortunatamente, qualcun altro (@ uʍop ǝpısdn) è già andato al processo, ha scritto il codice e lo ha reso disponibile per la comunità.

È possibile trovare il collegamento al blog here incluso come utilizzare gli esempi e il codice in here.

Saluti.

+0

Penso che questa sia l'unica soluzione valida. Ho passato un po 'di tempo da quando ho fatto questa domanda e non sto più lavorando a quel progetto, ma proverò a convalidare. Grazie. – Chris911

+0

Esattamente. Il problema descritto si presenta a causa di questa riga: 'String [] words = str.split (" ");' in ** SimpleAdapter.SimpleFilter ** class, che semplicemente omette gli spazi delle Stringhe iniziali, dividendole in parole. –

+0

@Luis Ho un problema simile e ho postato una domanda http: // stackoverflow.it/questions/39573432/get-filtro-non-lavoro-per-spazio-in-android Spero che tu possa aiutare. – AndroidNewBee

2

Provare a utilizzare questo:

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

Funziona solo parzialmente perché rimuove gli spazi, ma diciamo che digito "Red Ap" lo ridurrà a "RedAp" e non c'è la parola nella mia selezione che contiene "RedAp". Quindi in pratica risolve il problema se metto un singolo "" prima o dopo una parola ma non dà il risultato che voglio. – Chris911

+2

@ Chris911: in realtà non significa. Il ritocco significa, rimuove semplicemente lo spazio prima e dopo che il testo inizia e si arresta rispettivamente. Quindi se digiterete "mela", allora lo taglierà per essere "mela" ma se si digita " ap rosso ", lo prenderà come it.got il punto? – Hiral

+0

Grazie per la spiegazione di Hiral ma che ancora non risolve il problema. Sto iniziando a pensare che l'unico modo per farlo è implementare il mio adattatore con il mio filtro personale. – Chris911