所以我有一個自定義ArrayAdapter
,所以我可以使用ListView
上可用的標題/字幕視圖。我有一個接受字符串並過濾適配器的EditText
。Android自定義ArrayAdapter不會刷新後過濾器
過濾器工作在某種意義上說,它是過濾了正確的對象(我可以通過點擊它告訴我們,它開始用正確的「額外」的意圖。)
然而,即使過濾工程,適配器中的項目不會更新以顯示正確的信息...標題和副標題不正確。我們可以假設我們在ListView
上有0到9的項目,我用搜索過濾到3個項目,並且可以說過濾的項目是顯示的5,6,9 ... 3項目,但是它的前3個項目原始預搜索項目ListView
(0-2)。如果我點擊項目2(第三項),則9的內容將包含在新的意圖中。這對於搜索條件是正確的,但標題確實反映了正確的信息。
我不知道我需要告訴ListView
刷新。 我不認爲它notifyDataSetChanged();
任何幫助表示讚賞。 謝謝!
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;
}
}
這是搜索
private 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
}
};
使用標準適配器工作正常,不需要使用notifyDataSetChanged,我的自定義適配器不會刷新 – 2012-08-07 17:53:18