SearchManager - добавление пользовательских предложений - PullRequest
7 голосов
/ 29 января 2012

Я прочитал всю документацию онлайн о создании интерфейсов поиска и добавлении пользовательских предложений ... но мне все еще неясно, как это работает.В документации сказано, что я должен «построить таблицу (например, в базе данных SQLite) для ваших предложений и отформатировать таблицу с необходимыми столбцами».Я предполагаю, что система в конечном итоге сама заполнит эту таблицу соответствующими предложениями ... но какой процесс / класс отвечает за это, и когда произойдут фактические вставки (до того, как пользователь выполнит какой-либо запрос, послепользователь сделал запрос и т. д.)?

И пока я задаю здесь вопрос, не мог бы кто-нибудь уточнить разницу между AutoCompleteTextView и SearchView с / нестандартными предложениями... это было бы здорово.AutoCompleteTextView кажется подозрительно простым для реализации по сравнению с SearchView (который требует внесения изменений в ContentProvider, вспомогательный класс SQLiteDatabase и т. Д.).

1 Ответ

5 голосов
/ 29 января 2012

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

Нет ограничений на то, как поставщик предложений вычисляет свои предложения.Вы можете выполнить веб-запрос к базе данных или прочитать файл.Но ответ на запрос в формате таблицы.Если предложения напрямую запрашиваются из базы данных, вы можете использовать курсор, отвечающий на запрос базы данных, чтобы доставить результат в методе query () поставщика контента.Если результат вычисляется из одного или нескольких источников, вы можете создать таблицу на лету с помощью MatrixCursor.

Строки ответа от поставщика предложений используются механизмом поиска для отображения предложения, онихранятся в таблице.Формат строк следующий:

private static final String[] COLUMNS = {
    "_id",
    SearchManager.SUGGEST_COLUMN_ICON_1,        // ID of a drawable (icon) as String
    SearchManager.SUGGEST_COLUMN_TEXT_1,        // main text for suggestion display
    SearchManager.SUGGEST_COLUMN_TEXT_2,        // secondary text for suggestion display
    SearchManager.SUGGEST_COLUMN_INTENT_DATA,   // this could be an URI to access the suggestion as used in an intent with a VIEW action
    SearchManager.SUGGEST_COLUMN_INTENT_ACTION, // this could be Intent.ACTION_VIEW
    SearchManager.SUGGEST_COLUMN_SHORTCUT_ID    // e.g. SearchManager.SUGGEST_NEVER_MAKE_SHORTCUT
};

Поиск описан здесь более подробно: http://developer.android.com/guide/topics/search/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...