あなたがそうのようなFilter実現することができます。
そして、あなたがあなたの元のリストのためのセッターを追加する必要があります。あなたはこれらと同様の変更を行う必要があり、あなたのアダプタクラスで
class MyFilter extends Filter {
private final MyAdapter myAdapter;
public MyFilter(MyAdapter myAdapter) {
this.myAdapter = myAdapter;
}
@Override
protected Filter.FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint == null || constraint.length() == 0) {
// unfiltered: show all
results.values = myAdapter.getOriginalList();
results.count = myAdapter.getOriginalList().size();
} else {
// filtered
List<Integer> newWorkingList = new ArrayList<>();
if (constraint.equals('1')) {
// odd
for (Integer integer : myAdapter.getOriginalList()) {
if (integer % 2 == 1) {
newWorkingList.add(integer);
}
}
} else if (constraint.equals('2')) {
// even
for (Integer integer : myAdapter.getOriginalList()) {
if (integer % 2 == 0) {
newWorkingList.add(integer);
}
}
}
results.values = newWorkingList;
results.count = newWorkingList.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
myAdapter.setFilteredList((List<String>) results.values);
if (results.count == 0) {
myAdapter.notifyDataSetInvalidated();
} else {
myAdapter.notifyDataSetChanged();
}
}
}
を。
そして、最後に、あなたのポップアップダイアログのリスナーに、ユーザーの選択に応じてこれらの行を追加する必要があります。
myAdapter.getFilter().filter(null);
myAdapter.getFilter().filter('1');
myAdapter.getFilter().filter('2');
使用[この](https://gist.github.com/pskink/ 2dd4d17a93caf02ff696533e82f952b0)汎用アダプタ – pskink