我正在使用CardsUI创建一个 ListView ,并计划使用getFilter()
. 每张卡都有一个title
可访问的 via getTitle()
。我见过的每个 getFilter 示例都是针对字符串的。有人知道我如何调整 getFilter() 以匹配 getTitle() 返回的标题并返回标题与给定字符串匹配的对象列表的任何好的示例(或可以提供一个好的示例)吗?
谢谢。
我正在使用CardsUI创建一个 ListView ,并计划使用getFilter()
. 每张卡都有一个title
可访问的 via getTitle()
。我见过的每个 getFilter 示例都是针对字符串的。有人知道我如何调整 getFilter() 以匹配 getTitle() 返回的标题并返回标题与给定字符串匹配的对象列表的任何好的示例(或可以提供一个好的示例)吗?
谢谢。
我已经在我的应用程序中实现了这种功能。
简要说明。实现您自己的扩展过滤器的类,如下一个类:
private class PlanetFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
// We implement here the filter logic
if (constraint == null || constraint.length() == 0) {
// No filter implemented we return all the list
results.values = planetList;
results.count = planetList.size();
}
else {
// We perform filtering operation
List<Planet> nPlanetList = new ArrayList<Planet>();
for (Planet p : planetList) {
if (p.getName().toUpperCase().startsWith(constraint.toString().toUpperCase()))
nPlanetList.add(p);
}
results.values = nPlanetList;
results.count = nPlanetList.size();
}
return results;
}
}
在您的基本适配器中实现 Filterable 接口,它必须实现 getFilter() 方法:
@Override
public Filter getFilter() {
if (planetFilter == null)
planetFilter = new PlanetFilter();
return planetFilter;
}
并将所有内容联系在一起,textWatcher
请edittext
在您输入文本的地方使用。
editTxt.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
System.out.println("Text ["+s+"]");
aAdpt.getFilter().filter(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
该代码取自下一个教程。