Есть ли способ указать значок для SearchRecentSuggestionsProvider? - PullRequest
1 голос
/ 17 августа 2011

Я хочу указать значок для локальной истории поиска моего приложения, но я не вижу в документах ничего, что позволило бы мне легко добавить его.Чтобы было ясно, я использую встроенный API поиска Android и использую реализованный SearchRecentSuggestionsProvider.

Кроме того, я нацеливаюсь на уровень API 7.

-Dan

Ответы [ 2 ]

2 голосов
/ 18 августа 2011

Хорошо, я не уверен, что это самый простой способ выполнить то, что я просил, но вот как я это сделал:

  1. Создайте еще один ContentProvider и используйте его в моем searchable.xml
  2. Этот новый метод запроса ContentProvider запросит мой SearchRecentSuggestionsProvider со специальными параметрами и специальным URI и вернет этот курсор.

Фрагмент исходного кода моего нового ContentProvider:

...
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
final String[] PROJECTION = new String[] {
        "_id", 
        "display1 AS " + SearchManager.SUGGEST_COLUMN_TEXT_1,
        "display2 AS " + SearchManager.SUGGEST_COLUMN_TEXT_2,
        "query AS " + SearchManager.SUGGEST_COLUMN_QUERY,
        android.R.drawable.ic_menu_recent_history + " AS " + SearchManager.SUGGEST_COLUMN_ICON_1,
    };
    final Uri URI = 
        Uri.parse("content://" + SearchHistoryProvider.AUTHORITY + "/suggestions");
    return getContext().getContentResolver().query(
        URI, 
        PROJECTION, 
        "display1 LIKE ?", 
        new String[] {selectionArgs[0] + "%"}, 
        "date DESC");
}
...

Если SearchRecentSuggestionsProvider не настроен на использование двух строк, 'display2' в вышеприведенной проекции должен быть изменен на 'null' или, возможно, вообще может быть опущен.

Если путь «предложения» пропущен в URI, он не будет работать. Это должны быть «предложения», в противном случае вы увидите исключение «Неверный Uri».

Я выкопал большую часть этой информации, перекопав исходный код в SearchRecentSuggestionsProvider.

0 голосов
/ 17 августа 2011

Вы пытались добавить значок в раздел поставщика в файле AndroidManifest.xml?Не уверен, что это будет работать, но см. http://developer.android.com/guide/topics/manifest/provider-element.html для получения полной информации об атрибутах элемента <provider>.

...