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!
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
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
Bu çözüldü. – Curtain