Adapter
Filterable
的用例似乎是按String
或CharSequence
进行过滤,用户可能会在{{ 3}},但这是否是平台提供的唯一标准,用于过滤EditText
s?
如果我有可以按其他方式分类的对象的后备数据结构怎么办?例如,如果我有一个具有enum
属性{1}}的Shirt对象列表,该怎么办?用户应该能够从可用的color
列表中过滤衬衫列表。作为一名优秀的应用程序开发人员,我想使用过滤机制中构建的平台,但我能找到的只有Adapter
的Filter
方法。我肯定错过了什么。我看到在我自己的自定义filter (CharSequence constraint)
中实现这种过滤机制是多么简单,但感觉应该有一些内置的方法来做自定义过滤器。任何人?提前谢谢。
答案 0 :(得分:0)
在Android中,您的适配器可以实施 Filterable(可能与您搜索的Filter相同)
=>这是您的数据与过滤器之间的联系
链接在这里
[您应该看到标记的答案] List View Filter Android
答案 1 :(得分:0)
你可以创建自己的FilterAdapter并自带逻辑,例如这个用两个字符串来处理对象并管理过滤器:
public class TwoWordsFilter extends Filter {
ArrayList<BranchData> branchDatas = new ArrayList<BranchData>();
private BranchDataAdapter branchDataAdapter;
public TwoWordsFilter(ArrayList<BranchData> branchDatas,BranchDataAdapter branchDataAdapter) {
this.branchDatas = branchDatas;
this.branchDataAdapter=branchDataAdapter;
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint==null || constraint.length()==0){
results.values=branchDatas;
results.count=branchDatas.size();
}else {
List<BranchData> mBranchDatas=new ArrayList<BranchData>();
for (BranchData branchData : branchDatas) {
if (branchData.getBranch_name().trim().toLowerCase().startsWith(constraint.toString().trim().toLowerCase()) ||
branchData.getCity().trim().toLowerCase().startsWith(constraint.toString().trim().toLowerCase())){
mBranchDatas.add(branchData);
}
}
results.values=mBranchDatas;
results.count=mBranchDatas.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results.count == 0)
branchDataAdapter.notifyDataSetInvalidated();
else {
branchDataAdapter.setBranchDatas((ArrayList<BranchData>) results.values);
branchDataAdapter.notifyDataSetChanged();
}
}
}
你的适配器中的把这个:
@Override
public Filter getFilter() {
if (twoWordsFilter==null){
twoWordsFilter=new TwoWordsFilter(branchDatas,this);
}
return twoWordsFilter;
}