2010-10-05 21 views
6

ListView'imi EditText kutusundan filtrelemeyi denedim, ancak şu anda çalışmıyor.ListView'de metin nasıl filtrelenir?

Verileri düzgün bir şekilde alan bir ListView'im var ve bir ArrayAdapter sınıfı ve kendi ArrayList sınıfımı kullanarak kendi ListView'ime eklendiler. Örneğin, "tablo" yazarak ListView'imdeki yüklenen başlıkları sıralamak istiyorum ve bana bırakılan ve eşleşen tabloyu bana göstermelidir.

Benim geçerli 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 
    } 

}; 

Tamam, peki bunu nasıl elde edebilirsiniz? EditText kutusuna bir değer girdiğimde, bir eşleşme olsa bile her şey kaybolur.

Önceden teşekkürler ve daha fazla kod parçacıklarına ihtiyacınız olup olmadığını veya bu sorunun açık olmadığını söyle!

cevap

6

ArrayAdapter tarafından uygulanan yerleşik filtre, toString() yöntemini çağırarak içerilen nesneyi dizeye dönüştürür. Eşleştirmeyi gerçekleştirmek için kullanılacak bu dizedir. Sipariş nesnesinde yalnızca bir dize alanı eşleştirmeye çalışıyorsanız, bu alanı döndürmek için Sipariş sınıfınızın toString() yöntemini geçersiz kılabilirsiniz. Eğer böyle eşleşen birden çok alanda olduğu gibi daha esnek eşlemeyi gerçekleştirmek Özel bir filtre oluşturmak için nasıl gösteren bu yazıyı kontrol etmek istiyorsanız:

Custom filtering in Android using ArrayAdapter

+0

Hayır, öyle olmadı. Yukarıdaki bağlantı benim için gerekli olmayan kod parçalarını tanıtan ve ArrayAdapter'ımın zaten filtresine sahip olduğundan özel bir filtre oluşturmaya gerek olmadığı için, soruma daha özel bir kod çözümü verdiğimi takdir ediyorum. – Curtain

+0

ArrayAdapter tarafından uygulanan yerleşik filtre toString() yöntemini çağırarak içerilen nesneyi dizeye dönüştürür. Eşleştirmeyi gerçekleştirmek için kullanılacak bu dizedir. Sipariş nesnesinde yalnızca bir dize alanı eşleştirmeye çalışıyorsanız, bu alanı döndürmek için Sipariş sınıfınızın toString() yöntemini geçersiz kılabilirsiniz. Birden çok alanı eşleme gibi daha esnek bir eşleme yapmak isterseniz, özel bir filtre sınıfı oluşturduğundan bahsettiğim yayın yardımcı olur. – onlygo

+0

Bu çözüldü. – Curtain

İlgili konular