ListAdapter 过滤器不是使用字符串吗?
Posted
技术标签:
【中文标题】ListAdapter 过滤器不是使用字符串吗?【英文标题】:ListAdapter Filter other than using Strings? 【发布时间】:2012-04-18 10:16:02 【问题描述】:似乎Adapter
即Filterable
的用例是通过String
或CharSequence
进行过滤,这可能由用户在EditText
中输入,但这真的是唯一的吗平台为过滤Adapter
s 提供的标准?
如果我有一个可以以其他方式分类的对象的支持数据结构怎么办?例如,如果我有一个具有enum
属性color
的 Shirt 对象列表怎么办?用户应该能够从可用的color
s 列表中过滤衬衫列表。作为一名优秀的应用程序开发人员,我想使用内置过滤机制的平台,但我能找到的只有 Filter
和 filter (CharSequence constraint)
之类的方法。我肯定错过了什么。我看到在我自己的自定义 BaseAdapter
中实现这个过滤机制是多么简单,但感觉应该有一些内置的方法来做自定义过滤器。任何人?提前致谢。
【问题讨论】:
FacebookSDK 3.0 确实有一种过滤其他参数的方法。问题是他们从头开始实现了新的过滤器类。检查 PickerFragment.GraphObjectFilter您可以创建自己的 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;
【讨论】:
【参考方案2】:在 Android 中,您的适配器可以实现可过滤(可能与您搜索的过滤器相同) => 这是您的数据与过滤器之间的连接。 链接在这里 [你应该看到标记的答案] List View Filter Android
【讨论】:
以上是关于ListAdapter 过滤器不是使用字符串吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Kotlin 在 ListAdapter 中使用 Filterable?
在 Android 应用程序中使用 ListView 按字母顺序过滤 ListAdapter