support studio rojo mainactivity importa getsupportactionbar java android appcompat

java - studio - No se puede crear una instancia de la clase: android.support.v7.widget.SearchView



com android support appcompat v7 28 (2)

Estoy tratando de usar un SearchView para mi aplicación. Primero agregué appcompat a mi proyecto:

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

En segundo lugar agrego 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 comienzo la activity obtengo esto:

03-07 17: 25: 39.110 16861-16861 / de.treevo.app W / MenuInflater ﹕ No se puede crear una instancia de 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 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) en com .android.internal.os.ZygoteInit.main (ZygoteInit.java:595) Causado por: android.view.InflateException: Línea de archivo XML binario # 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.createV) 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 : 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 Menu 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.pp. .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 (Native Method) 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. .LayoutInflater.createViewFromTag (LayoutInflater.java:694) en android.view.LayoutInflater.rInflate (LayoutInflater.java:755) en android.view.view.view.pac.Car.Cuenta.Participación de una persona. 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) at android.view.MenuInflater $ MenuState.newInstance (MenuInflater.java:471) en android.view.MenuInflater $ MenuState.setItem (MenuInflater.java:430) en android.view.MenuInflater $ MenuState.addItem (MenuInlater). ) 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.doInp.) en el campo de la piscina. .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.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. invocar (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 Dibujable (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. (I 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.createViewFfp. ) 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 (Native Method) 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) .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.ppl. .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 presiono el ícono de búsqueda no pasa nada :(

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; }


En mi caso, funciona en modo de desarrollo; sin embargo, se bloquea en modo de lanzamiento (exportar apk firmado). Para arreglarlo, por favor agregue esta línea a proguard-rules.txt

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


Intente agregar 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.