2012-10-09 37 views
0

我有一個ListView,我覆蓋了getView方法,該方法使用以下代碼正確填充。如果我使用'adapter.getfilter()',它不會更新列表視圖,儘管在適配器中它已過濾,並且在NEXT過濾器完成時通過'out()'正確顯示,在編輯框中輸入文本。任何想法如何在我重寫getView和過濾器影響適配器的同時而不是下次在編輯框中輸入文本時如何啓用過濾?覆蓋getView時啓用篩選

final ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, 
android.R.layout.activity_list_item,stringArray) 
{ @Override 
public View getView(int position, View convertView, ViewGroup parent) 
    {View row= super.getView(position, convertView, parent); 
     View row=convertView; 
if(position==0){ 
row = mLayoutInflater.inflate(R.layout.list_header, null); 
final TextView sectionView = (TextView) row.findViewById(R.id.list_item_section_text); 
sectionView.setText(myList.get(position)); 
} 
else 
{row = mLayoutInflater.inflate(R.layout.list_item, null); 
final TextView sectionView = (TextView) row.findViewById(R.id.list_item_entry_title); 
sectionView.setText(myList.get(position));} 
return row;}}); 

lv.setAdapter(adapter); 
for (int i = 0; i < adapter.getCount(); i++) {//displaying properly 
pr("adapter list"+adapter.getItem(i)); 
} 
myFilter.addTextChangedListener(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); 
adapter.notifyDataSetChanged(); 
for (int i = 0; i < adapter.getCount(); i++) { 
pr("adapter list before "+   (adapter.getItem(i)));//printing properly but not 
//updated in listview ,sometimes it just displays first few ,even if it should not be 
//in filtered result after filtering.  
} } }); 

回答

0

我會建議構建一個自定義過濾器。擴展Filter對象(我通常將它作爲適配器的內部類)並讓它進行過濾。保存您傳遞給數組的項目的副本並從中進行過濾。在publishResults中清除適配器,並將已過濾的項目添加回去。