14

似乎 an Adapterthat is的用例是按用户在 an 中输入的orFilterable进行过滤,但这真的是平台为过滤s 提供的唯一标准吗?StringCharSequenceEditTextAdapter

如果我有一个可以以其他方式分类的对象的支持数据结构怎么办?例如,如果我有一个具有enum属性的 Shirt 对象列表,该color怎么办?用户应该能够从可用的列表中过滤衬衫列表colorFilter作为一名优秀的应用程序开发人员,我想使用内置过滤机制的平台,但我能找到的只有filter (CharSequence constraint). 我肯定错过了什么。我看到在我自己的 custom 中实现这个过滤机制是多么简单BaseAdapter,但感觉应该有一些内置的方法来做自定义过滤器。任何人?提前致谢。

4

2 回答 2

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;
}
于 2015-02-04T15:05:20.513 回答
0

在 Android 中,您的适配器可以实现Filterable(可能与您搜索的过滤器相同)
=> 这是您的数据与过滤器之间的连接。
这是链接 [您应该看到标记的答案] List View Filter Android

于 2014-11-25T06:10:01.407 回答