ejemplo - Dos actividades searchable.xml en un AndroidManifest.xml
searchview android ejemplo (3)
En su archivo Manifest
, actualice la etiqueta de actividad ImageListActivity
<activity
android:name=".ImageListActivity"
...
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchResultsImageActivity" />
</activity>
Por lo tanto, cuando ImageListActivity
búsqueda nativa en ImageListActivity
, invocará SearchResultsImageActivity
y por defecto una para otros.
Suponiendo que SearchResultsImageActivity
se puede searchable
.
Tengo una aplicación para Android que tiene algunas actividades diferentes para buscar artículos e imágenes descargadas de RSS.
Me gustaría poder ofrecer conectar el botón de búsqueda al cuadro de diálogo Buscar , utilizando el archivo searchable.xml
. He logrado hacer esto con una 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 iniciar el cuadro de diálogo Buscar desde cualquier actividad, e inicia SearchResultsActivity
.
Ahora me gustaría poder buscar imágenes cuando el usuario es un ImageListActivity
, usando un searchable_images.xml
, y usar el valor predeterminado en cualquier otro lugar.
Tengo una SearchResultsImageActivity
que incluye el siguiente elemento de metadatos y usé el mismo elemento en ImageListActivity
.
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable_images"/>
Al presionar el botón de búsqueda en ImageListActivity
, obtengo la búsqueda predeterminada de searchable_articles.xml
.
Si cambio el default_searchable
a SearchResultsImageActivity
, la búsqueda de imágenes siempre se inicia y la búsqueda de artículos nunca se inicia.
Si default_searchable
por completo el elemento de metadatos de searchable
defecto y agrego actividades seleccionadas seleccionadas de metadatos, no se inicia ninguna búsqueda.
Estoy bastante seguro de que esto debería ser posible, pero no sé qué estoy haciendo mal.
Si anula la función de búsqueda solo en esa actividad, debería evitar que la llamada de búsqueda pase al nivel de la aplicación. El valor de retorno se controla si la llamada se propaga hacia arriba.
@Override
public boolean onSearchRequested() {
onPromptSearch();
return false; // don''t go ahead and show the search box
}
Una forma en que lo hice fue crear actividades falsas y luego cambiar las actividades cuando las necesitas.
<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>
Crear dos clases que se nombran para las sub actividades.
luego crea intenciones como esta 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 llame a los intentos de onClick cuando se haga clic en un botón o se haga clic en otro componente: