Ho provato a filtrare il mio ListView dalla mia casella EditText, ma attualmente non funziona.Come filtrare correttamente il testo in una ListView?
Ho un ListView che ottiene i dati correttamente e vengono aggiunti al mio ListView utilizzando una classe ArrayAdapter e la mia classe ArrayList. Quando ad esempio, digitando "table", desidero che diventi i titoli caricati nel mio ListView e che dovrebbe mostrarmi gli elementi rimasti e la tabella corrispondente.
mio codice corrente:
private ArrayList<Order> orders; /* ArrayList class with my own Order class to
define title, info etc. */
private OrderAdapter adapter; //Own class that extends ArrayAdapter
orders = new ArrayList<Order>();
adapter = new OrderAdapter(this, R.layout.listrow, orders); /* listrow defining a
single item in my ListView */
setListAdapter(adapter); //Set our adapter to a ListView
search.addTextChangedListener(filterTextWatcher); //search is my EditText
private TextWatcher filterTextWatcher = new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
adapter.getFilter().filter(s); //Filter from my adapter
adapter.notifyDataSetChanged(); //Update my view
}
};
Va bene, così come posso raggiungere questo obiettivo? Quando inserisco un valore nella casella EditText scompare tutto, anche se c'è una corrispondenza.
Grazie in anticipo e dimmi se hai bisogno di più frammenti di codice o se questa domanda non è chiara!
No, non lo ha fatto. Apprezzo molto una soluzione di codice più specifica alla mia domanda, dal momento che il suddetto link introduce parti di codice che non sono necessarie per me, e, non c'è bisogno di creare un filtro personalizzato poiché il mio ArrayAdapter ha già il suo filtro. – Curtain
Il filtro integrato implementato da ArrayAdapter converte l'oggetto contenuto in stringa chiamando il metodo toString(). È questa stringa che verrà utilizzata per eseguire l'abbinamento. Se si sta tentando di abbinare un campo stringa nell'oggetto Ordine, è possibile sovrascrivere il metodo toString() per la classe Ordine per restituire tale campo. Se si desidera eseguire una corrispondenza più flessibile, ad esempio la corrispondenza di più campi, il post che ho menzionato potrebbe essere d'aiuto, poiché crea una classe di filtro personalizzata. – onlygo
Questo l'ha risolto. – Curtain