最近、このSOの質問に報奨金を追加しましたが、元の質問はArrayAdapterではなくSimpleAdapterを要求していることに気付きました。したがって、この質問はArrayAdapterに関連しています。
複数の検索語を使用して、ListViewでArrayAdapterをフィルタリングできるようにしたいと思います。たとえば、私のリストに次の項目が含まれている場合:
a thing
another thing
a different thing
nothing
some thing
'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
'。フィルタは文字列全体を検索するため、スペースを検索語の一部として扱います。基本的に、私が求めているのは、1つの特定の文字列ではなく、それぞれがスペースで区切られた複数の検索用語でリストをフィルタリングするにはどうすればよいですか?各検索用語がアイテムに少なくとも1回表示されている限り、そのアイテムは結果に返されます。
SOでも同様の質問があったようですが(たとえば、この投稿の上部にあるSimpleAdaptersに関するリンクを参照してください)、これを実現する実際の方法はどこにも見つかりませんでした。答えは、検索フレーズをスペース文字で区切られた個々の文字列に分割し、各文字列で複数回検索を実行し、すべての反復に一致する結果のみを返すことであると思います...