Две операции 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
, используя searchable_images.xml
и используя значение по умолчанию везде.
У меня есть SearchResultsImageActivity
, который включает в себя следующий элемент метаданных и использует тот же самый элемент в ImageListActivity
.
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable_images"/>
При нажатии кнопки поиска в ImageListActivity
, я получаю поиск по умолчанию из searchable_articles.xml
.
Если я изменяю default_searchable
на SearchResultsImageActivity
, поиск изображений всегда запускается, и поиск статьи никогда не запускается.
Если я полностью удалю элемент метаданных default_searchable
и добавлю searchable
метаданные только выбранные действия, поиск не будет запущен.
Я уверен, что это должно быть возможно, но я не знаю, что я делаю неправильно.
Ответы
Ответ 1
В обновлении файла Manifest
тег активности ImageListActivity
<activity
android:name=".ImageListActivity"
...
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchResultsImageActivity" />
</activity>
Итак, когда вы вызываете собственный поиск в ImageListActivity
, он вызывается SearchResultsImageActivity
и по умолчанию для других.
Предполагая, что SearchResultsImageActivity
searchable
.
Ответ 2
Один из способов сделать это - создать поддельные действия, а затем отключить действия, когда они вам понадобятся.
<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();
и вызовите intents из onClick, когда нажата кнопка или какой-либо другой компонент щелкнет:
Ответ 3
Если вы переопределите функцию поиска только в этом действии, это должно помешать поисковому вызову перейти на уровень приложения. Возвращаемое значение управляет, если вызов размножается.
@Override
public boolean onSearchRequested() {
onPromptSearch();
return false; // don't go ahead and show the search box
}