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 { *; } 
  • El envío de entrada de ANR excedió el tiempo de espera en Android 4.4
  • Puntero nulo en la vista inflada al cargar por segunda vez un fragmento de mapa de google
  • Error: Android Pre Dex: Android SDK no está especificado
  • Prácticas recomendadas para capturar un runtime de unhandle Excepción para JAVA en el sistema operativo Android?
  • Centre SelectBox texto en libgdx usando scene2d
  • ¿Existe una manera de almacenar de forma segura los datos de usuario en un dispositivo Android?
  • Diálogo de reemplazo dismiss () con la nueva AlphaAnimation
  • Cómo deshabilitar / habilitar a todos los niños en LinearLayout en Android
  • JSoup 1.6.0 en Android lanza Excepción: String.isEmpty () NoSuchMethodExists
  • Java.lang.NoSuchMethodError: Ningún método virtual keySet ()
  • Cómo evitar java.lang.NoClassDefFoundError: android / os / PersistableBundle en pre-L?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.