Próbowałem odfiltrować mój ListView z mojego pola EditText, ale obecnie nie działa.Jak poprawnie filtrować tekst w ListView?
Mam ListView, który pobiera dane poprawnie i są one dodawane do mojego własnego ListView za pomocą klasy ArrayAdapter i mojej własnej klasy ArrayList. Kiedy na przykład wpisuję w "tabela", chcę, aby sortował z załadowanych tytułów w moim ListView i powinien pokazywać mi elementy, które pozostały i pasującą tabelę.
Mój bieżący kod:
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
}
};
Ok, więc w jaki sposób można to osiągnąć? Kiedy wprowadzam jakąś wartość do pola EditText, wszystko znika, nawet jeśli jest dopasowanie.
Z góry dziękuję i proszę mi powiedzieć, czy potrzebujesz więcej fragmentów kodu lub czy to pytanie jest niejasne!
Nie, to nie. Naprawdę doceniam bardziej szczegółowe rozwiązanie mojego pytania, ponieważ powyższy link wprowadza części kodu, które nie są mi potrzebne, i nie ma potrzeby tworzenia niestandardowego filtru, ponieważ mój ArrayAdapter już ma filtr. – Curtain
Wbudowany filtr implementowany przez ArrayAdapter konwertuje zawarty obiekt do łańcucha, wywołując metodę toString(). To jest ten ciąg, który zostanie użyty do wykonania dopasowania. Jeśli próbujesz dopasować tylko jedno pole tekstowe do swojego obiektu Order, możesz zastąpić metodę toString() dla swojej klasy Order, aby zwrócić to pole. Jeśli chcesz wykonać bardziej elastyczne dopasowywanie, takie jak dopasowywanie wielu pól, post, o którym wspomniałem, pomoże, ponieważ tworzy niestandardową klasę filtru. – onlygo
To rozwiązało. – Curtain