2011-10-28 64 views
1

我有一個ListView,我過濾和EditText,我有一個TextWatcher上獲取文本更改事件。一切都很好,直到你從編輯文本中刪除文本。然後過濾器保持爲第一個字母,不會回到沒有過濾器。ListView上的空文本過濾器

我在做什麼錯?這裏是TextWatcher的代碼,我甚至試圖禁用過濾器,但沒有效果。

EditText txtFilter = (EditText) this.findViewById(R.id.txtFilter); 
txtFilter.addTextChangedListener(new TextWatcher() { 
    public void afterTextChanged(Editable s) { 
     if(s.length()==0) 
     { 
      lv.setTextFilterEnabled(false); 
     } 
    } 

    public void beforeTextChanged(CharSequence s, int start, int count, int after) 
    { 
    } 

    public void onTextChanged(CharSequence s, int start, int before, int count) 
    { 
     lv.setTextFilterEnabled(true); 
     lv.setFilterText(s.toString()); 
    } 
}); 

感謝您的幫助

回答

2

我認爲阿迪爾蘇姆羅答案是壞...我只是看android源文件和setFilterText文件,看起來像

public void setFilterText(String filterText) { 
    // TODO: Should we check for acceptFilter()? 
    if (mTextFilterEnabled && !TextUtils.isEmpty(filterText)) { 
     createTextFilter(false); 
     // This is going to call our listener onTextChanged, but we might not 
     // be ready to bring up a window yet 
     mTextFilter.setText(filterText); 
     mTextFilter.setSelection(filterText.length()); 
     if (mAdapter instanceof Filterable) { 
      // if mPopup is non-null, then onTextChanged will do the filtering 
      if (mPopup == null) { 
       Filter f = ((Filterable) mAdapter).getFilter(); 
       f.filter(filterText); 
      } 
      // Set filtered to true so we will display the filter window when our main 
      // window is ready 
      mFiltered = true; 
      mDataSetObserver.clearSavedState(); 
     } 
    } 
} 

所以你可以看到它的設置適配器過濾器...

你應該使用的lv.clearTextFilter();代替lv.setTextFilterEnabled(false);

+0

是的,這個答案比上一個更完整。謝謝你的幫助。 –

+0

+1 - 同意你@Selvin。 –

1

相反過濾ListView,不要通過Adapter過濾像這樣:

txtFilter.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); 
    } 
}); 
+0

謝謝!這解決了它。 –

+0

它不是一個問題... setFilterText在列表視圖設置過濾器上的底層適配器也 – Selvin

+0

對於那些遲到了這裏。請注意,@Selvin提供的答案是正確的。 –