私は最近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
」で返されます。フィルタは文字列全体を検索しているため、スペースを検索語の一部として扱います。基本的に、私はどのように特定の文字列ではなく、複数の検索語句をスペースで区切ってリストをフィルタリングするかということです。各検索語句が項目に少なくとも1回表示されている限り、その項目は結果に返されます。
類似の質問は、以前に尋ねられたようです(SimpleAdaptersに関するこの記事の一番上にあるリンクを参照してください)。しかし、これを実現する実際の方法はありませんでした。答えは、スペースフレーズで区切られた個々の文字列に検索フレーズを分け、各文字列で複数回検索を実行し、一致する結果のみを返すことを含むと仮定します。すべて反復の...
のはなぜですかその恐ろしい感覚を「何が私が行方不明ですか」?アダプターを拡張し、getFilter()メソッドをオーバーライドしたり、独自のフィルターを作成したり、performFiltering()をオーバーライドしたり、正規表現を使用して任意のコレクションを返すことはできませんか? ArrayList、あなたは必要ですか? – Simon
誰かが私と同じ間違いを犯してアダプターを拡張したくないという点を忘れてしまった場合に備え、私のコメントを残しておきます。ドー!ごめんなさい! – Simon
ええと、ArrayAdapterを拡張しなければ、フィルタを変更するインターフェースがないため、これを行うことはできません。なぜカスタムアダプターを書いてみませんか? – Sam