同様の問題があったので、カスタム表示プロパティ(名前、タグ、IDなど)を単一のスペースで区切られた単一の文字列にしました。
私のCustomViewクラス内でこのような何か:
public String toString() {
return (this.name + " " + this.tag + " " + this.coords + " " + this.id);
}
そして私は、示されたすべての現在のカスタムビューを使用して私のカスタムビューをフィルタ:
ArrayList<CustomView> filteredList = new ArrayList<>();
...
private void filter(String constraint) {
for(CustomView view : AllViews) {
if (!filteredList.contains(view))
if (view.toString().toLowerCase().contains(constraint.toLowerCase())) {
filteredList.add(view);
break;
}
}
}
// Do something to add the filteredList to your adapter
// and show the new list of CustomViews.
}
あなたはフィルタ(をnewText)メソッドを呼び出すことができますSearchView OnQueryTextListener()内のonQueryTextChange(String newText)の内部です。
このように、SearchViewに入力した単語がCustomViewのどこにあっても、対応するCustomViewが表示されます。そうしないと、ビューは「消えます」。
これが役に立ちます。
うわー私は過去3時間見回していたので、その答えにとても感謝しています。本当にありがとう。しかし、私は簡単な質問があります。あなたの方法は、パフォーマンスのヒットが大きいビューの再測定と再レイアウトが必要です。これをよりスムーズに達成する方法はありますか? – Wowzer
おそらくもっと良い解決策があります。それは問題を解決するために思いついた出発点です。トランジションをスムーズにするには、レイアウトが変化したときにフェードインするアニメーションを設定するか、レイアウト変更を自分で処理するように親レイアウトを設定します(これは私が行ったものです)。私はarround 10のカスタムビューを持っており、パフォーマンスに問題はありません。あなたがより良いまたはより速い方法を見つけるなら、私に教えてください:) –