2010-10-19 1 views
17

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

Я хочу, чтобы иметь возможность подключить search button to the Search dialog, используя файл 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 метаданных только выбранные действия, поиск не запускается.

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

+0

Вы поняли это? – Dan

+0

Я не думаю, что вы можете сделать это с помощью xml, так как ресурс один к одному с намерением. Возможно, вы сможете отключить ресурс в своем коде. – JPM

ответ

1

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

<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 при нажатии на кнопку или какой-либо другой компонент, нажмите:

+0

Я не сталкивался с этой деятельностью в рамках действия. Я не понимаю, что это делает. – jamesh

+0

Его способ отключить действия при нажатии кнопок, но позволяет сохранить основную активность в фоновом режиме. Полезно при выполнении поиска по документу с помощью RSS-канала. – JPM

0

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

@Override 
public boolean onSearchRequested() { 
    onPromptSearch(); 
    return false; // don't go ahead and show the search box 
} 
4

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

<activity 
    android:name=".ImageListActivity" 
    ... 

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

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

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

+0

Это работает. –