Özel bir ArrayAdapter
var, bu yüzden ListView
adresinde bulunan Başlık/Altyazı görünümünü kullanabiliyorum. Bir dize kabul eden ve bağdaştırıcıyı filtreleyen bir EditText
var. Filtre doğru nesneleri filtrelediğini anlamda çalışırAndroid Custom ArrayAdapter, filtre sonrasında yenilemiyor
(Bunun üzerine tıklayarak söyleyebilir ve doğru "ekstra" ile niyet başlar.)
Ancak bile Filtrelerin çalışma da, Bağdaştırıcıdaki öğeler doğru bilgileri görüntülemek için güncelleştirilmez ... Başlık ve altyazı yanlış.
ListView
öğesinden 0 - 9 arası öğelere sahip olduğumuzu söylerseniz, bir aramayla 3 öğeye filtre uygularım ve filtrelenen öğelerin 5, 6, 9 ... 3 öğenin görüntülendiğini, ancak ilk 3 olduğunu Orijinal ön aramadaki öğeler ListView
(0-2). Eğer madde 2'ye (üçüncü öğe) tıklarsam, 9'un içeriği yeni amaçta yer alır. Bu, arama kriterleri için doğrudur, ancak başlık doğru bilgiyi yansıtmıştır.
Yenilemek için ListView
neye anlatmam gerektiğini bilmiyorum. Sanırım herhangi bir yardımın takdir edilmediğini düşünmüyorum. Teşekkürler!
public class myListAdapter extends ArrayAdapter<Pizza>{
private ArrayList<Pizza> items;
private PizzaViewHolder myListHolder;
private class PizzaViewHolder{
TextView title;
TextView subtitle;
}
public myListAdapter(Context context, int textViewResourceId, ArrayList<Pizza> items) {
super(context, textViewResourceId, items);
this.items = items;
// TODO Auto-generated constructor stub
}
@Override
public View getView(int pos, View convertView, ViewGroup parent){
View v = convertView;
if(v == null){
LayoutInflater vi = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.myList_item, null);
myListHolder = new PizzaViewHolder();
myListHolder.title = (TextView)v.findViewById(R.id.title);
myListHolder.subtitle = (TextView)v.findViewById(R.id.subtitle);
v.setTag(myListHolder);
}else myListHolder = (PizzaViewHolder)v.getTag();
Pizza myList = items.get(pos);
if (myList != null){
myListHolder.title.setText(myList.getTitle());
myListHolder.subtitle.setText(myList.getSubTitle());
}
return v;
}
}
Bu
o benim özel ArrayAdapter için özel Filtre gerekli görünüyor, kararlıyım kadarıyla aramaprivate TextWatcher filterTextWatcher = new TextWatcher(){
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
if(!s.equals("")){
((Filterable) this.listView1.getAdapter()).getFilter().filter(s);
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
}
};
Standart bir adaptörün kullanılması iyi değil, notifyDataSetChanged kullanılmasına gerek yok, benim özel bağdaştırıcım –