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.