2010-10-05 16 views
6

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!

Odpowiedz

6

Wbudowany filtr zaimplementowany 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 dopasowania wielu dziedzinach, sprawdź ten artykuł, który pokazuje, jak stworzyć własny filtr:

Custom filtering in Android using ArrayAdapter

+0

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

+0

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

+0

To rozwiązało. – Curtain

Powiązane problemy