ユーザーがインストールしたアプリケーションのリストで、検索機能にカスタム フィルターを使用しています。それはうまく機能しますが、検索はアプリケーションパッケージ名の検索に対してのみ機能します。つまり、実際のアプリケーション名ではなく、パッケージ名のみを検索します。たとえば、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 と ApplicationName ではなく、packageName のみをフィルタリングします。
追加エラー: