SearchView getActionView devolver null

Esto funcionaba hace unos días, pero de repente se detuvo. Sólo quiero usar el widget de búsqueda de barra de acción cuando cierto fragmento es visible.

Ahora no puedo obtener el SearchView , ahora getActionView devuelve siempre null.

Searchable.xml

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

Manifest.xml

 <activity android:name=".ui.activities.MainActivity" android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> <action android:name="android.intent.action.SEARCH"/> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> <meta-data android:name="android.app.default_searchable" android:value=".ui.activities.MainActivity" /> </activity> 

Menu.xml

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myapp="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_search_place" android:icon="@drawable/ic_2_action_search" android:orderInCategory="1" android:title="@string/title_search" myapp:showAsAction="collapseActionView|ifRoom" myapp:actionViewClass="android.support.v7.widget.SearchView"/> </menu> 

El fragmento

 ... setHasOptionsMenu(true); ... @Override public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { inflater.inflate(R.menu.menu, menu); MenuItem searchItem = menu.findItem(R.id.action_search_place); mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem); SearchManager searchManager = (SearchManager) getBaseActivity().getSystemService(Context.SEARCH_SERVICE); if (mSearchView != null) { mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName())); mSearchView.setIconifiedByDefault(true); mSearchView.setOnQueryTextListener(this); } super.onCreateOptionsMenu(menu, inflater); } 

Hoy tuve el mismo problema y creo que lo resolví. Resulta que hice un par de cosas que no eran exactamente como por el contrato de ActionBarCompat :

  • Cada actividad que utiliza ActionBarCompat debe extender ActionBarActivity lugar de FragmentActivity directamente
  • Cada actividad que utiliza ActionBarCompat debe declarar su tema como heredado de los temas de ActionBarCompat .

Los dos que encontré viendo el video de la explicación de Google.

Ahora mi searchView ya no es null .

Tuve el mismo problema porque en mi menú que he utilizado: android:actionViewClass="android.widget.SearchView" según la documentación de google.

Bueno, resulta que si estoy usando AppCompatActivity debería usar app:actionViewClass="android.widget.SearchView" lugar.

Espero que esto ayude a alguien.

Si estás usando proguard, esta es la respuesta posible: https://code.google.com/p/android/issues/detail?id=58508

En resumen, agregue debajo de la línea a su archivo de configuración proguard-rules.pro .

 -keep class android.support.v7.widget.SearchView { *; } 

Lo arreglé: en el menú xml, utilicé el espacio de nombres de la aplicación:

  app:showAsAction="collapseActionView|always" app:actionViewClass="android.support.v7.widget.SearchView" 

El tutorial de Android, https://developer.android.com/training/search/setup.html , utiliza android: showAs y android: actionView …

Yo estaba con el mismo error. Y he hecho las siguientes cosas:

Tengo una Actividad que se extiende por FragmentActivity:

 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.feed, menu); // Associate searchable configuration with the SearchView SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.action_search) .getActionView(); searchView.setSearchableInfo(searchManager .getSearchableInfo(getComponentName())); return true; } 

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> 

Menu.xml:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="br.com.srtorcedor.FeedActivity"> <item android:id="@+id/action_search" android:icon="@drawable/abc_ic_search" android:title="@string/search_title" android:showAsAction="always" android:actionViewClass="android.widget.SearchView"/> </menu> 

AndroidManifest:

  <activity android:name=".FeedActivity" android:icon="@drawable/ic_action_pins" android:label="@string/title_activity_feed"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity> 

¿Podría comprobar si funciona con usted?

Hoy me di cuenta de que estaba recibiendo null de la llamada getActionView () en los elementos que no tienen:

 android:showAsAction="always" 

Parece que de lo contrario simplemente no inflar correctamente.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.