検索ダイアログを使用するときに、カスタム検索の提案を正常に実装しました。ただし、現在、各提案項目は単なるテキストです。左側にアイコンを追加したいと思います。ただし、問題は、これらの写真をローカルに持っておらず、URL 経由でアクセスできることです。SUGGEST_COLUMN_ICON_1 . _
3 に答える
これは可能ですが、かなりおかしくてハックのようなものです。アプリの内部キャッシュ ディレクトリから画像を提供するには、ContentProvider を作成する必要があります (こちらの回答を参照してください https://stackoverflow.com/a/15667914/473201 )。
次に、ファイル ContentProvider がメイン UI スレッドでアクセスされるため、そこに画像をダウンロードすることはできません。検索候補 ContentProvider の query() 関数ですべての画像をダウンロードする必要があります。それらをアプリの内部キャッシュ ディレクトリに配置すると、ファイル ContentProvider は、SearchView がそれらを要求したときにそれらを返すことができます。
何かのようなもの:
class ImagesProvider extends ContentProvider {
...
// stuff from https://stackoverflow.com/a/15667914/473201
...
}
次に、検索 ContentProvider で:
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
// create a cursor table of results
MatrixCursor mc = new MatrixCursor(columns);
for (SearchResult res : results) {
String filename = res.getId();
ImagesProvider.downloadAndSaveFile(filename, res.getPictureUrl());
mc.addRow(new Object[] {
res.getId(),
res.getName(),
ContentUris.withAppendedId(ImagesProvider.CONTENT_URI, filename)
});
}
return mc;
}
デフォルトの Android 検索機能を使用する限り、これは不可能であることがわかりました。他に分かる方はコメントください。
これは古い質問だと思いますが、このトピックに関する StackOverflow の投稿はまばらに見えます。
検索をカスタム レイアウトで機能させるのにかなりの時間 (約 5 時間) を費やしました (結果を全画面表示にしてカテゴリ別にセグメント化する必要がありました。これは非常にカスタム レイアウトです) 。ただし、SearchWidget を使用すると、Android システムがコンテンツ プロバイダーのクエリ メソッドを直接呼び出して結果を醜いドロップダウン リストに表示していたため、SearchActivity (定義されたカスタム レイアウトを含む) が作成されませんでした。私は独自のカスタム検索を展開することになり、1時間ほどかかりました。簡単な答えは、独自の検索を展開することです.