No se puede instanciar la clase: android.support.v7.widget.SearchView

Estoy intentando utilizar un SearchView para mi aplicación. Primero appcompat a mi proyecto:

  compile "com.android.support:appcompat-v7:19.0.1+" 

sé agregar este código a mi menú:

 <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_search" android:title="@string/search" android:icon="@drawable/ic_action_search" android:showAsAction="ifRoom|collapseActionView" android:actionViewClass="android.support.v7.widget.SearchView" /> </menu> 

pero cuando empiezo la activity consigo esto:

03-07 17: 25: 39.110 16861-16861 / de.treevo.app W / MenuInflater: No se puede instanciar la clase: android.support.v7.widget.SearchView java.lang.reflect.InvocationTargetException en java.lang.reflect.Constructor. newInstance (Método nativo) en android.view.MenuInflater $ MenuState.newInstance (MenuInflater.java:471) en android.view.MenuInflater $ MenuState.setItem (MenuInflater.java:430) en android.view.MenuInflater $ MenuState.addItem MenuInflater.java:451) en android.view.MenuInflater.parseMenu (MenuInflater.java:188) en android.view.MenuInflater.inflate (MenuInflater.java:110) en de.treevo.app.search.onCreateOptionsMenu (search.java : 260) en android.app.Activity.onCreatePanelMenu (Activity.java:2538) en com.android.internal.policy.impl.PhoneWindow.preparePanel (PhoneWindow.java:489) en com.android.internal.policy.impl. PhoneWindow.doInvalidatePanelMenu (PhoneWindow.java:853) en com.android.internal.policy.impl.PhoneWindow $ 1.run (PhoneWindow.java:273) en android.view.Choreographer $ CallbackRecord.run (Choreograph er.java:761) en android.view.Choreographer.doCallbacks (Choreographer.java:574) en android.view.Choreographer.doFrame (Choreographer.java:543) en android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java : 747) en android.os.Handler.handleCallback (Handler.java:733) en android.os.Handler.dispatchMessage (Handler.java:95) en android.os.Looper.loop (Looper.java:136) en android .app.ActivityThread.main (ActivityThread.java:5017) en java.lang.reflect.Method.invoke (Método nativo) en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:779) at com .android.internal.os.ZygoteInit.main (ZygoteInit.java:595) Causado por: android.view.InflateException: Archivo XML binario línea # 41: Error al inflar la clase en android.view.LayoutInflater.createView (LayoutInflater.java:620 ) en com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView (PhoneLayoutInflater.java:56) en android.view.LayoutInflater.onCreateView (LayoutInflater.java:669) en android.view.LayoutInflater.createVie wFromTag (LayoutInflater.java:694) en android.view.LayoutInflater.rInflate (LayoutInflater.java:755) en android.view.LayoutInflater.inflate (LayoutInflater.java:492) en android.view.LayoutInflater.inflate (LayoutInflater.java : 397) en android.support.v7.widget.SearchView. (SearchView.java:262) en android.support.v7.widget.SearchView. (SearchView.java:254) en java.lang.reflect.Constructor.newInstance ( Método Nativo) en android.view.MenuInflater $ MenuState.newInstance (MenuInflater.java:471) en android.view.MenuInflater $ MenuState.setItem (MenuInflater.java:430) en android.view.MenuInflater $ MenuState.addItem (MenuInflater. java: 451) en android.view.MenuInflater.parseMenu (MenuInflater.java:188) en android.view.MenuInflater.inflate (MenuInflater.java:110) en de.treevo.app.search.onCreateOptionsMenu (search.java:260 ) en android.app.Activity.onCreatePanelMenu (Activity.java:2538) en com.android.interna l.policy.impl.PhoneWindow.preparePanel (PhoneWindow.java:489) en com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu (PhoneWindow.java:853) en com.android.internal.policy.impl.PhoneWindow $ 1 .run (PhoneWindow.java:273) en android.view.Choreographer $ CallbackRecord.run (Choreographer.java:761) en android.view.Choreographer.doCallbacks (Choreographer.java:574) en android.view.Choreographer.doFrame Choreographer.java:543) en android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:747) en android.os.Handler.handleCallback (Handler.java:733) en android.os.Handler.dispatchMessage (Handler.java : 95) en android.os.Looper.loop (Looper.java:136) en android.app.ActivityThread.main (ActivityThread.java:5017) en java.lang.reflect.Method.invoke (Método nativo) en com. android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java: 779) en com.android.internal.os.ZygoteInit.main (ZygoteInit.java:595) Causado por: java.lang.reflect.InvocationTargetException en java.lang.reflect.Constructor.newInstance (Método nativo) en android.view. LayoutInflater.createView (LayoutInflater.java:594) en com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView (PhoneLayoutInflater.java:56) en android.view.LayoutInflater.onCreateView (LayoutInflater.java:669) en android.view .LayoutInflater.createViewFromTag (LayoutInflater.java:694) en android.view.LayoutInflater.rInflate (LayoutInflater.java:755) en android.view.LayoutInflater.inflate (LayoutInflater.java:492) en android.view.LayoutInflater.inflate LayoutInflater.java:397) en android.support.v7.widget.SearchView. (SearchView.java:262) en android.support.v7.widget.SearchView. (SearchView.java:254) en java.lang.reflect.Constructor .newInstance (Método nativo) en android.view.MenuInflater $ MenuState.newInstance (MenuInflater.java:471) en android.view.MenuInflater $ MenuState.setItem (MenuInflater.java:430) en android.view.MenuInflater $ MenuState.addItem (MenuInflater.java:451 ) en android.view.MenuInflater.parseMenu (MenuInflater.java:188) en android.view.MenuInflater.inflate (MenuInflater.java:110) en de.treevo.app.search.onCreateOptionsMenu (search.java:260) en android .app.Activity.onCreatePanelMenu (Activity.java:2538) en com.android.internal.policy.impl.PhoneWindow.preparePanel (PhoneWindow.java:489) en com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu (PhoneWindow .java: 853) en com.android.internal.policy.impl.PhoneWindow $ 1.run (PhoneWindow.java:273) en android.view.Choreographer $ CallbackRecord.run (Choreographer.java:761) en android.view.Choreographer .doCallbacks (Choreographer.java:574) en y roid.view.Choreographer.doFrame (Choreographer.java:543) en android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:747) en android.os.Handler.handleCallback (Handler.java:733) en android.es .Handler.dispatchMessage (Handler.java:95) en android.os.Looper.loop (Looper.java:136) en android.app.ActivityThread.main (ActivityThread.java:5017) en java.lang.reflect.Method. invoke (Método nativo) en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:779) en com.android.internal.os.ZygoteInit.main (ZygoteInit.java:595) Causado por: android. content.res.Resources $ NotFoundException: El recurso no es Drawable (color o ruta): TypedValue {t = 0x2 / d = 0x7f010030 a = -1} en android.content.res.Resources.loadDrawable (Resources.java:2068) en android.content.res.TypedArray.getDrawable (TypedArray.java:602) en android.widget.ImageView. (ImageView.java:129) en android.widget.ImageView. mageView.java:119) en java.lang.reflect.Constructor.newInstance (Método nativo) en android.view.LayoutInflater.createView (LayoutInflater.java:594) en com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView ( PhoneLayoutInflater.java:56) en android.view.LayoutInflater.onCreateView (LayoutInflater.java:669) en android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:694) en android.view.LayoutInflater.rInflate (LayoutInflater.java:755 ) en android.view.LayoutInflater.inflate (LayoutInflater.java:492) en android.view.LayoutInflater.inflate (LayoutInflater.java:397) en android.support.v7.widget.SearchView. (SearchView.java:262) at android.support.v7.widget.SearchView. (SearchView.java:254) en java.lang.reflect.Constructor.newInstance (Método nativo) en android.view.MenuInflater $ MenuState.newInstance (MenuInflater.java:471) en y roid.view.MenuInflater $ MenuState.setItem (MenuInflater.java:430) en android.view.MenuInflater $ MenuState.addItem (MenuInflater.java:451) en android.view.MenuInflater.parseMenu (MenuInflater.java:188) en android .view.MenuInflater.inflate (MenuInflater.java:110) en de.treevo.app.search.onCreateOptionsMenu (search.java:260) en android.app.Activity.onCreatePanelMenu (Activity.java:2538) en com.android. internal.policy.impl.PhoneWindow.preparePanel (PhoneWindow.java:489) en com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu (PhoneWindow.java:853) en com.android.internal.policy.impl.PhoneWindow $ 1 .run (PhoneWindow.java:273) en android.view.Choreographer $ CallbackRecord.run (Choreographer.java:761) en android.view.Choreographer.doCallbacks (Choreographer.java:574) en android.view.Choreographer.doFrame Choreographer.java:543) en android.view.Choreogra pher $ FrameDisplayEventReceiver.run (Choreographer.java:747) en android.os.Handler.handleCallback (Handler.java:733) en android.os.Handler.dispatchMessage (Handler.java:95) en android.os.Looper.loop (Looper.java:136) en android.app.ActivityThread.main (ActivityThread.java:5017) en java.lang.reflect.Method.invoke (Método nativo) en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:779) en com.android.internal.os.ZygoteInit.main (ZygoteInit.java:595)

y cuando empujo el icono de búsqueda nada sucede 🙁

Edit1:

 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.offline, menu); MenuItem searchItem = menu.findItem(R.id.action_search); mSearchView = (SearchView) searchItem.getActionView(); //setupSearchView(searchItem); // menu.findItem(R.id.action_search).getActionView(); return true; } 

2 Solutions collect form web for “No se puede instanciar la clase: android.support.v7.widget.SearchView”

Trate de añadir un prefijo personalizado en su diseño como:

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_search" android:title="@string/search" android:icon="@drawable/ic_action_search" app:showAsAction="ifRoom|collapseActionView" app:actionViewClass="android.support.v7.widget.SearchView" /> </menu> 

Consulte la documentación , en el ejemplo, debe agregar un prefijo personalizado (como "aplicación" en el código anterior).


Además, en lugar de:

 MenuItem searchItem = menu.findItem(R.id.action_search); mSearchView = (SearchView) searchItem.getActionView(); 

Prueba esto:

 MenuItem searchItem = menu.findItem(R.id.action_search); // with MenuItemCompat instead of your MenuItem mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem); 

Déjeme saber si esto ayuda.

En mi caso funciona en el modo de desarrollo sin embargo se bloquea en el modo de lanzamiento (export firmado apk). Para corregir esto, agregue esta línea a proguard-rules.txt

 -keep class android.support.v7.widget.SearchView { *; } 
  • Estudio de Android: Advertencia mientras intento mover Clase a otro paquete
  • Tipo 'jint' no se pudo resolver, y JNIEnv, jclass
  • Error de recursos en el estudio android después de la actualización: No se ha encontrado ningún recurso
  • Android Cómo sincronizar dos tareas asíncronas?
  • ¿Dónde está un código de ejemplo / tutorial de Viewpager que funciona bien para todos?
  • Deserialización de tipos genéricos con GSON
  • ¿Cuál es la forma correcta de obtener el inflador de diseño en Android?
  • Protocolos de alto nivel para Bluetooth / WiFi Direct Sockets?
  • ¿Cuál es la lógica de diseño detrás de Fragmentos como clases internas estáticas vs clases públicas independientes?
  • GoogleApiClient no está conectado aún.
  • ¿Cómo transmitir vídeo directamente entre dvr (servidor) y el teléfono móvil con android (cliente)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.