La vista de búsqueda no funciona desde la aplicación compat

Desde que implementé app compat mi búsqueda no funciona más:

Process: com.laurenswuyts.witpa, PID: 26666 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.SearchView.setSearchableInfo(android.app.SearchableInfo)' on a null object reference at com.laurenswuyts.witpa.Activities.Events.EventActivity.onCreateOptionsMenu(EventActivity.java:75) at android.app.Activity.onCreatePanelMenu(Activity.java:2820) at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:275) at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:276) at android.support.v7.app.ActionBarActivityDelegate$1.onCreatePanelMenu(ActionBarActivityDelegate.java:79) at android.support.v7.widget.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:49) at android.support.v7.internal.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:459) at android.support.v7.internal.app.ToolbarActionBar$1.run(ToolbarActionBar.java:69) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Así que nullpointer para searchview mientras lo tengo:

 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.event_main, menu); // Get the SearchView and set the searchable configuration // 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 super.onCreateOptionsMenu(menu); } 

Y en mi menú tengo esto:

 <!-- Search Widget --> <item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/ic_action_search" app:showAsAction="always" android:actionViewClass="android.support.v7.widget.SearchView"/> 

No tengo ni idea de por qué ya no funciona, pero sucedió desde que empecé a usar app compat 21.

Saludos,

6 Solutions collect form web for “La vista de búsqueda no funciona desde la aplicación compat”

Intente usar el espacio de nombres de la app personalizada para su actionViewClass también:

 app:actionViewClass="android.support.v7.widget.SearchView"/> 

Agregue la siguiente línea al archivo proguard-rules.pro ubicado en la carpeta de la aplicación :

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

Esto también podría suceder si tiene activado proguard y está rayando aways clase SearchView . Tendrías que modificar la configuración de proguard para mantener la clase.

Vea esta pregunta para más detalles.

Después de un rato de jugar "funcionamiento y error" encontré una solución. Parece que el elemento de interfaz de usuario no es la razón de lo que causa el error. Después de establecer la búsqueda en el QueryListener está funcionando bien. Aquí está un código:

Actividad que contiene el SearchBar:

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String s) { Log.d(TAG, "onQueryTextSubmit "); return false; } @Override public boolean onQueryTextChange(String s) { Log.d(TAG, "onQueryTextChange "); return false; } }); return true; } 

Searchable.xml

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

Y el "SearchBar" en menu.xml

  <item android:id="@+id/search" android:title="@string/search_title" android:icon="@drawable/abc_ic_search_api_mtrl_alpha" app:showAsAction="collapseActionView|ifRoom" app:actionViewClass="android.support.v7.widget.SearchView"/> ... 

Y por último, pero no menos importante, el manifiesto (pero esto debe ser claro) …

  <activity android:name=".activities.MainActivity" android:label="@string/title_activity_main"> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> </activity> 

Más información -> Docs

Es una información adicional a la respuesta de Simas. Encontré esto en otra respuesta ( https://stackoverflow.com/a/33400808/4949671 ) y fue muy importante para resolver mi excepción:

Observe que, es, app:actionViewClass NOT android:actionViewClass

Después de hacer clic en un resultado, su aplicación espera que una operación no se haya completado e intente ir más lejos en un argumento de intención.

SearchView.OnSuggestionListener y devuelve true que notifica a tu aplicación que la operación de clic ha finalizado.

  searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() { @Override public boolean onSuggestionClick(int position) { return true; } @Override public boolean onSuggestionSelect(int position) { return false; } }); 
  • Cómo ocultar el botón de menú para una actividad
  • Cuadro de diálogo android con menú
  • Android: cómo hacer animaciones de transición en los iconos de menú de la barra de herramientas?
  • Menú de opciones - quitar el foco del elemento
  • Cambiar la visibilidad de MenuItem cuando se hace clic
  • Acción del elemento Android: onCreateOptionsMenu ()
  • Android: estilo de menú de desbordamiento en la barra de acción
  • Android: cambiar los elementos del menú de opciones mediante programación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.