我最近在this SO question中添加了一個賞金,但意識到原始問題要求使用SimpleAdapter而不是ArrayAdapter。所以,這個問題涉及ArrayAdapter:ArrayAdapter - 使用多個搜索項進行篩選
我想能夠使用多個搜索條件過濾ListView中的ArrayAdapter。例如,如果我的列表包含以下項目:
a thing
another thing
a different thing
nothing
some thing
如果我要尋找的「東西」,然後所有條款應在過濾結果中返回。這是可以使用以下代碼完成的正常行爲:
private TextWatcher filterTextWatcher = new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
myAdapter.getFilter().filter(s.toString());
}
};
但是;如果我輸入了搜索短語「a thing
」,我預計要顯示的結果如下:
a thing
another thing
a different thing
事實上,所有我的結果「a thing
」得到恢復。由於過濾器正在查找整個字符串,因此它將空間視爲搜索術語的一部分。從本質上講,我問的是如何過濾列表不是由一個特定的字符串,而是由多個搜索項,每個由空格分隔?只要每個搜索項至少在項目中出現一次,那麼該項目應該返回結果中。
類似的問題似乎之前已經問過SO(例如,請參閱本文頂部的關於SimpleAdapters的鏈接),但是我找不到實際的方法來完成此操作。我想這個答案會涉及將搜索短語分隔成單獨的字符串,用空格字符分隔,然後在每個字符串上多次運行搜索,並且只返回匹配迭代的所有的結果...
爲什麼我得到那個可怕的「我錯過什麼」的感覺?您是否可以不擴展適配器,然後重寫getFilter()方法,創建您自己的過濾器,重寫performFiltering()並使用正則表達式返回任何集合,例如ArrayList,你需要嗎? – Simon
我會在這裏留下我的評論,以防有人犯我同樣的錯誤,並錯過了你不想擴展適配器的觀點。衛生署!抱歉! – Simon
嗯,如果不擴展ArrayAdapter,這是無法完成的,因爲沒有接口來更改過濾器。你爲什麼不想寫一個自定義適配器? – Sam