El widget de la barra de búsqueda no inicia actividad de búsqueda

Estoy intentando implementar una búsqueda en mi aplicación android usando un widget de barra de búsqueda en la barra de acción.

Estoy siguiendo

Http://developer.android.com/guide/topics/search/search-dialog.html http://developer.android.com/guide/topics/ui/actionbar.html#ActionView

Tutoriales para hacer esto.

Tengo dos actividades involucradas en la búsqueda. La actividad SearchBar tiene la barra de acción y AcceptSearch es mi actividad de búsqueda. Aunque declaré qué actividad era la actividad de búsqueda, la consulta no se envía a AcceptSearch y la actividad no se inicia.

Configuré la barra de búsqueda de tal manera que una sugerencia de la barra de búsqueda aparece cuando el widget está vacío, pero la sugerencia tampoco aparece nunca. Aquí está mi código.

Barra de búsqueda

public class SearchBar extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.search_bar); } @Override public boolean onCreateOptionsMenu(Menu menu) { //Inflate the options menu from XML MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); // Get the SearchView and set the searchable configuration SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); return true; } 

AceptarBúsqueda

 public class AcceptSearch extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash_screen); //Get the intent, verify the action and get the query Intent intent = getIntent(); if(Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); //Start the search doMySearch(); } } 

Searchable.xml

 <?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_label" android:hint="@string/search_hint"> </searchable> 

Opciones_menu

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:title="Help" android:id="@+id/menu_help" android:showAsAction="always" /> <item android:title="Categories" android:id="@+id/menu_cats" android:showAsAction="always" /> <item android:id="@+id/menu_search" android:title="Search with Searchlet" android:icon="@drawable/ic_action_search" android:showAsAction="ifRoom|collapseActionView" android:actionViewClass="android.widget.SearchView"/> </menu> 

Manifiesto

  <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.searchlet" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".SplashScreenActivity" android:label="@string/title_activity_splash_screen" android:screenOrientation="portrait" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".AcceptSearch"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> </activity> <activity android:name=".SearchBar" android:label="@string/app_name"> <intent-filter> <action android:name="com.example.searchlet.CLEARSCREEN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest> 

Creo que es toda la información necesaria para recrear la situación.

Gracias a todos de antemano. Aprecio

Tuve un problema similar. Estaba siguiendo el tutorial de Grokking y la actividad nunca se abrió. Intenté las soluciones de Indrek que funcionan para mí.

Debe asegurarse de que tiene los metadatos correctos bajo el padre correcto. Los metadatos

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

Debe estar bajo la aplicación. Los siguientes metadatos

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

Debe estar bajo el parámetro de actividad de búsqueda dentro de AndroidManifest.xml.

En la actividad de búsqueda hice lo que decía en el tutorial vinculado antes para gestionar la pila de actividades. Espero que esta solución funcione para todos con el mismo problema.

Los tutoriales parecen faltar una parte importante. Tienes que agregar <meta-data android:name="android.app.default_searchable" android:value=".MySearchActivityName" /> dentro de las etiquetas <application> .

Pau Arlandis Martínez, gracias. Su solución funciona bien y tutorial con pila de actividades es útil. Puse en la sección <application> este metadato:

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

Y me di cuenta de que el método @Override onQueryTextSubmit debe devolver false para iniciar la actividad de búsqueda. De lo contrario searchButton en el teclado virtual no funciona.

Te faltan los metadatos en el archivo '.SearchBar' Actividad del manifiesto, que dirige a la actividad '.AcceptSearch'.

Agregue los siguientes metadatos a la actividad ".SearchBar":

 <!-- search widget target activity--> <meta-data android:name="android.app.default_searchable" android:value=".AcceptSearch" /> 

Aquí se actualiza el código del manifiesto de actividad '.SearchBar'.

 <activity android:name=".SearchBar" android:label="@string/app_name"> <!-- search widget target activity--> <meta-data android:name="android.app.default_searchable" android:value=".AcceptSearch" /> <intent-filter> <action android:name="com.example.searchlet.CLEARSCREEN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

La sugerencia y la etiqueta en searchable.xml son referencias y no cadenas codificadas.

  <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:hint="@string/search_hint" android:label="@string/app_name"/> 

De este modo se debe declarar la actividad que contiene el widget SearchView en el manifiesto

 <activity android:name="ACTIVITY PATH WHICH CONTAINS SEARCHVIEW WIDGET"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="android.app.default_searchable" android:value=".SearchableActivity" /> </activity> 

Declaración para la actividad de búsqueda en el manifiesto.

  <activity android:name=".SearchableActivity"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity> 
  • Obtención de elementos secundarios de LinearLayout
  • Cómo hacer claro (vacío / sin valores) spinner on clearbutton
  • ¿Cómo puedo tener un ListView dentro de un NestedScrollView
  • Mensaje emergente de Android Eclipse con el botón
  • ¿Cómo obtener una lista de elementos en espresso?
  • Cómo llamar a constantes en java?
  • Android, ¿cómo mostrar un diálogo de error de un try catch?
  • ¿Cómo puedo evitar que alguien se comunique con mi servidor, excepto mi aplicación de Android?
  • Carpeta de activos en Android Studio Unit Test
  • Cómo agregar los datos escritos a un archivo?
  • No se puede ejecutar dex: varios archivos dex definen Lcom / google / android / gms / analytics / internal / Command
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.