Android Studio的getFilter方法用于给ListView或RecyclerView中的数据进行过滤。但是,由于getFilter并不会对数据进行排序,我们需要自行进行排序操作。以下是一个对字符串数组进行排序的示例代码:
String[] items = {"banana", "apple", "orange", "pear"};
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, items) {
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
String[] filteredItems = Arrays.copyOf(items, items.length);
Arrays.sort(filteredItems);
results.values = filteredItems;
results.count = filteredItems.length;
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results.count > 0) {
clear();
addAll((String[]) results.values);
notifyDataSetChanged();
}
}
};
}
};
ListView listView = findViewById(R.id.list_view);
listView.setAdapter(adapter);
在performFiltering方法中,我们先将原数组items复制到filteredItems中。接着,我们对filteredItems进行排序操作,得到排序后的数组。最后,将排序后的数组设置到FilterResults变量中,返回即可。
在publishResults方法中,我们先根据results中的值(即排序后的数组)清空ListView中原有的数据,再将新的数据加入到ListView中,并通知adapter数据已经发生变化。
这样就可以在使用getFilter方法时对数据进行排序,并在ListView或RecyclerView中呈现排序后的结果了。