Две операции searchable.xml в одном AndroidManifest.xml

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

Я хотел бы предложить предложить подключить кнопку поиска к диалоговому окну поиска , используя файл searchable.xml . Мне удалось сделать это с помощью одного поиска, используя:

 <activity android:name=".search.SearchResultsActivity" android:label="@string/search_results_activity_title" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable_articles"/> </activity> 

И в <application />

 <meta-data android:name="android.app.default_searchable" android:value=".search.SearchResultsActivity" /> 

Теперь я могу запустить диалог поиска из любой активности, и он запускает SearchResultsActivity .

Теперь я хотел бы иметь возможность искать изображения, когда пользователь является ImageListActivity , используя файл ImageListActivity и использует значение по умолчанию везде.

У меня есть SearchResultsImageActivity которая включает в себя следующий элемент метаданных и использует тот же элемент в ImageListActivity .

 <meta-data android:name="android.app.searchable" android:resource="@xml/searchable_images"/> 

При нажатии кнопки поиска в ImageListActivity я получаю поиск по умолчанию из searchable_articles.xml .

Если я изменяю default_searchable на SearchResultsImageActivity , поиск изображений всегда запускается, и поиск статьи никогда не запускается.

Если я полностью удалю элемент метаданных default_searchable и добавлю метаданные, searchable только выбранные действия, поиск не будет запущен.

Я уверен, что это должно быть возможно, но я не знаю, что я делаю неправильно.

В обновлении файла Manifest тег активности ImageListActivity

 <activity android:name=".ImageListActivity" ... <meta-data android:name="android.app.default_searchable" android:value=".SearchResultsImageActivity" /> </activity> 

Поэтому, когда вы вызываете собственный поиск в ImageListActivity он вызывает SearchResultsImageActivity и по умолчанию для других.

Предполагая, что SearchResultsImageActivity searchable .

Один из способов сделать это – создать поддельные действия, а затем отключить действия, когда они вам понадобятся.

 <activity android:name="activitySearchMain" /> <activity android:name="activitySearchSub1"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.ALTERNATIVE" /> <category android:name="android.intent.category.SELECTED_ALTERNATIVE" /> <data android:scheme="user" /> </intent-filter> </activity> <activity android:name="activitySearchSub2"> <intent-filter> <action android:name="com.sample.twitter.action.SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.ALTERNATIVE" /> <category android:name="android.intent.category.SELECTED_ALTERNATIVE" /> <data android:scheme="user" /> </intent-filter> </activity> 

Создайте два класса, названных для вспомогательных действий.

Затем создайте намерения, подобные этому при щелчке по компоненту …

 Intent sourceIntent = getIntent(); Intent newIntent = new Intent(this, activitySearchSub2.class); newIntent.setAction(activitySearchSub2.ACTION2); newIntent.setData(sourceIntent.getData()); startActivity(newIntent); finish(); 

И вызывать намерения из onClick при нажатии кнопки или нажатии какого-либо другого компонента:

Если вы переопределите функцию поиска только в этом действии, это должно помешать поисковому вызову перейти на уровень приложения. Возвращаемое значение управляет, если вызов размножается.

 @Override public boolean onSearchRequested() { onPromptSearch(); return false; // don't go ahead and show the search box } 
Intereting Posts
Удаленная тестовая лаборатория (RTL) для Android Как сохранить данные массива в SharedPreferences? Geocoder.getFromLocation бросает IOException на эмулятор Android Не удалось запустить «adb root» на корневом телефоне Android Создание макета программно в android – проблема Библиотека поддержки дизайна Android с Theme.Material Разница между ContentValues ​​и HashMap? Android logcat регистрирует только информационный уровень на реальном устройстве. Не удается получить отладочные сообщения, даже необработанные исключения Что нужно сделать в Activity / Fragment и ViewModel в MVVM Как предотвратить множественные экземпляры активности при ее запуске с разными намерениями Нужно ли сохранять классы одного и того же пакета в одном и том же дескрипторе при использовании нескольких файлов dex Альтернативы использованию onRetainNonConfigurationInstance Десятичный разделитель запятой (',') с номеромDecimal inputType в EditText Кнопка с левой иконкой и текстом идеально выровнена Изображение png с серым фоном в android