Передайте параметр пользовательскому предложению поиска ContentProvider - PullRequest
2 голосов
/ 30 октября 2011

У меня есть рабочий класс пользовательских поисковых запросов (через http://developer.android.com/guide/topics/search/adding-custom-suggestions.html).. В настоящее время он возвращает один тип информации - «названия продуктов».

Я добавил некоторые дополнительные действия (экраны) в свое приложение, так что, если человек находится на странице продукта, запуск поиска должен возвращать результаты из "названий продуктов", но если они находятся в другом действии, я бы нравится поиск предложений, чтобы вытащить "имена производителей".

Я видел Доступ к пакету appSearchData из ContentProvider , но поставщик пользовательских подсказок для поиска расширяет ContentProvider, который не работает с ответом

Bundle b = intent.getBundleExtra(SearchManager.APP_DATA);

Этот пакет доступен для класса результатов поиска, но не для поставщика содержимого.

Как лучше всего передать параметр («продукт» или «производитель») поставщику контента для предложений поиска?

Ответы [ 2 ]

3 голосов
/ 11 ноября 2011

Это не похоже на идеальное решение, но у меня была такая же потребность, и я обнаружил, что могу выполнить свою работу, добавив общедоступный ivar или метод к подклассу ContentProvider, который обрабатывает предложения поиска.Перед началом поиска вы можете настроить своего провайдера по мере необходимости.Вы можете получить доступ к экземпляру провайдера из действия, например, так:

ContentProviderClient client = getContentResolver().acquireContentProviderClient("my.searchsuggestionprovider");
MyProviderClass provider = (MyProviderClass) client.getLocalContentProvider();

Теперь вы можете настроить с помощью provider.setParameter("product") или любым другим способом.Возможно, вам понадобится сбросить параметр на значение по умолчанию или что-то еще после создания курсора.

Редактировать: Это оказалось непрактичным, по крайней мере, в моем случае, так как поставщик контента каждый раз вызывается с query ()персонаж напечатан.Вместо этого я использовал обходной путь, аналогичный тому, который описан в set-search-hint-dynamicically .Создавая альтернативные «доступные для поиска» определения и действия XML, вы можете изменить URI, который передается поставщику контента в query (), добавив компонент пути для предоставления необходимого дополнительного параметра или контекста.

0 голосов
/ 19 сентября 2014

Я только что сделал статическую переменную для параметра в моем поставщике контента и установил его из действия.Я думал об этом, и это самый чистый обходной путь, который я нашел!

...