2010-10-19 9 views
17

Tengo una aplicación de Android que tiene algunas actividades diferentes para buscar artículos e imágenes descargados de RSS.Dos actividades searchable.xml en un AndroidManifest.xml

Me gustaría poder ofrecerle conectar el search button to the Search dialog, usando el archivo searchable.xml. Me las he arreglado para hacer esto con una sola búsqueda, usando:

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

y en el <application />

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

ahora puedo abrir el diálogo de búsqueda de cualquier actividad, y se pone en marcha el SearchResultsActivity.

Ahora me gustaría poder buscar imágenes cuando el usuario es un ImageListActivity, usando un searchable_images.xml, y usar el predeterminado en todos los demás.

Tengo un SearchResultsImageActivity que incluye el siguiente elemento de metadatos, y usé el mismo elemento en el ImageListActivity.

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

Al pulsar el botón de búsqueda en el ImageListActivity, tengo la búsqueda predeterminado de searchable_articles.xml.

Si cambio default_searchable a SearchResultsImageActivity, la búsqueda de imágenes siempre se inicia y la búsqueda de artículos nunca se inicia.

Si elimino por completo el elemento de metadatos default_searchable y añado actividades de solo metadatos searchable, no se inicia ninguna búsqueda.

Estoy bastante seguro de que esto debería ser posible, pero no sé lo que estoy haciendo mal.

+0

¿Has descubierto esto? – Dan

+0

No creo que puedas hacerlo usando xml ya que el recurso es uno a uno con un Intento. Es posible que pueda cambiar el recurso en su código. – JPM

Respuesta

1

Una forma de hacerlo fue crear actividades falsas y luego cambiar las actividades cuando las necesita.

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

Cree dos clases que se denominan para las actividades secundarias.

luego crear las intenciones de este tipo cuando se hace clic en el componente ...

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

y llamar a los intentos de onClick cuando se hace clic en un botón o algún otro componente es hacer clic:

+0

No he encontrado esta actividad dentro de un patrón de actividad. No estoy seguro de lo que está haciendo esto. – jamesh

+0

Es una forma de cambiar las actividades al hacer clic en los botones pero permitiéndole mantener la actividad principal en segundo plano. Es útil cuando se realizan búsquedas en un documento de, digamos, un feed RSS. – JPM

0

Si anula la búsqueda funcionar solo en esa actividad, debe evitar que la llamada de búsqueda suba al nivel de la aplicación. El valor de retorno controla si la llamada se propaga hacia arriba.

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

En el archivo Manifest actualizar la etiqueta ImageListActivity actividad

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

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

Así que cuando va a desencadenar la búsqueda nativo en ImageListActivity se invocará el SearchResultsImageActivity y uno por defecto para los demás.

Suponiendo SearchResultsImageActivity es searchable.

+0

Esto está funcionando. –

Cuestiones relacionadas