0

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

追加エラー:

ここに画像の説明を入力

4

1 に答える 1

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);
          }
    }
于 2013-10-20T19:25:26.360 に答える