我使用的是创建一个ListView CardsUI ,我打算创建使用搜索getFilter()
每个卡上有一个title
通过可访问getTitle()
我见过用getFilter的每个实例都一直只是字符串。 有谁知道任何很好的例子(或可以提供一个很好的例子)我怎么会适应用getFilter()来匹配通过的getTitle(返回标题),并与给定的字符串相匹配的标题返回对象的名单?
谢谢。
我使用的是创建一个ListView CardsUI ,我打算创建使用搜索getFilter()
每个卡上有一个title
通过可访问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;
}
}
在你的基地适配器实现过滤的接口,它必须实现用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) {
}
});
该代码是从下一个拍摄教程 。