我在用户安装的应用程序列表中使用自定义过滤器来搜索功能。它工作得很好,但搜索仅适用于搜索应用程序包名称。换句话说,它只搜索包名称而不是实际的应用程序名称。例如,要搜索gmail,如果我输入“gmail”,我就没有结果,而如果我搜索“gm”,我会在结果中获得gmail,因为它是gmail程序包名称的一部分。
我想搜索包名和应用程序名,但是我怎么能这样做呢?这是我的编码:
@Override
public Filter getFilter() {
if(filter == null) {
filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
List<ApplicationInfo> myFilteredAppList = new ArrayList<ApplicationInfo>();
constraint = constraint.toString().toLowerCase();
if (constraint.length() == 0) {
myFilteredAppList.addAll(originalListAppInfo);
}
for (ApplicationInfo appInfo : originalListAppInfo) {
String somefield = appInfo.packageName;
if (somefield.toLowerCase().contains(constraint.toString())) {
myFilteredAppList.add(appInfo);
}
}
results.count = myFilteredAppList.size();
results.values = myFilteredAppList;
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if(results.values != null)
{
mListAppInfo = (List<ApplicationInfo>)results.values;
notifyDataSetChanged();
}
}
};
}
return filter;
}
我在此行中过滤搜索:
String somefield = appInfo.packageName;
你可以看到它只过滤packageName而不是packageName和ApplicationName。
ADDED ERROR:
答案 0 :(得分:0)
试试这个。
for (ApplicationInfo appInfo : originalListAppInfo) {
String somefield = appInfo.packageName;
String name = appInfo.name;
if (somefield.toLowerCase().contains(constraint.toString().toLowerCase().toString())
||name.toLowerCase().contains(constraint.toString().toLowerCase().toString()) {
myFilteredAppList.add(appInfo);
}
}