2010-10-19 15 views
17

Ho un'app per Android che ha alcune attività diverse per la navigazione di articoli e immagini scaricati da RSS.Due attività searchable.xml in uno AndroidManifest.xml

Mi piacerebbe essere in grado di offrire di collegare il search button to the Search dialog, utilizzando il file searchable.xml. Sono riuscito a fare questo con una sola ricerca, utilizzando:

<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> 

e nel <application />

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

ora posso aprire la finestra di ricerca da qualsiasi attività, e si lancia il SearchResultsActivity.

Vorrei ora essere in grado di cercare immagini quando l'utente è un ImageListActivity, utilizzando un searchable_images.xml e utilizzare il valore predefinito ovunque.

Ho un SearchResultsImageActivity che include il seguente elemento meta-dati e utilizzato lo stesso elemento nello ImageListActivity.

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

Premendo il pulsante di ricerca nel ImageListActivity, ho la ricerca predefinito da searchable_articles.xml.

Se cambio lo default_searchable in SearchResultsImageActivity, la ricerca di immagini viene sempre avviata e la ricerca di articoli non viene mai avviata.

Se rimuovo del tutto l'elemento meta-dati default_searchable e aggiungo searchable meta-dati solo alle attività selezionate, non viene avviata alcuna ricerca.

Sono abbastanza sicuro che questo dovrebbe essere possibile, ma non so cosa sto facendo male.

+0

Hai capito? – Dan

+0

Non penso che tu possa farlo usando xml dato che la risorsa è un uno a uno con un Intento. Potresti essere in grado di cambiare la risorsa nel tuo codice. – JPM

risposta

1

Un modo in cui l'ho fatto è stato quello di creare attività false e quindi di disattivare le attività quando ne hai bisogno.

<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> 

Creare due classi denominate per le attività secondarie.

quindi creare intenti come questo, quando si fa clic su componente ...

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

e chiamare gli intenti da onClick quando un pulsante viene premuto o qualche altro componente è cliccare su:

+0

Non ho trovato questa attività all'interno di un modello di attività. Non sono chiaro cosa stia facendo. – jamesh

+0

È un modo per disattivare le attività quando si fa clic sui pulsanti, ma consente di mantenere l'attività principale in background. Utile quando si effettuano ricerche su un documento da un feed RSS. – JPM

0

Se si ignora la ricerca funzione proprio in questa attività, dovrebbe impedire alla chiamata di ricerca di passare al livello dell'applicazione. Il valore restituito controlla se la chiamata è stata propagata.

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

Nel file Manifest aggiornare il tag ImageListActivity attività

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

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

Quindi, quando si attiverà ricerca nativa in ImageListActivity che richiamerà il SearchResultsImageActivity e di default per gli altri.

Supponendo che SearchResultsImageActivity sia searchable.

+0

Funziona. –