Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


ActionbarSherlock SearchView en menu.xml da recursos $ NotFoundException

Cuando intento agregar un ActionBarSherlock SearchView a mi ActionBar la aplicación se bloquea tan pronto como se muestre la actividad. Como razón para esto, encontré lo siguiente en LogCat:

 10-22 21:22:51.070: W/MenuInflater(21873): Cannot instantiate class: com.actionbarsherlock.widget.SearchView ... 10-22 21:22:51.070: W/MenuInflater(21873): Caused by: java.lang.reflect.InvocationTargetException 10-22 21:22:51.070: W/MenuInflater(21873): at java.lang.reflect.Constructor.constructNative(Native Method) 10-22 21:22:51.070: W/MenuInflater(21873): at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 10-22 21:22:51.070: W/MenuInflater(21873): at android.view.LayoutInflater.createView(LayoutInflater.java:587) 10-22 21:22:51.070: W/MenuInflater(21873): ... 32 more 10-22 21:22:51.070: W/MenuInflater(21873): Caused by: android.content.res.Resources$NotFoundException: Resource is not a ColorStateList (color or path): TypedValue{t=0x2/d=0x7f01001f a=-1} 10-22 21:22:51.070: W/MenuInflater(21873): at android.content.res.Resources.loadColorStateList(Resources.java:2035) 10-22 21:22:51.070: W/MenuInflater(21873): at android.content.res.TypedArray.getColorStateList(TypedArray.java:342) 10-22 21:22:51.070: W/MenuInflater(21873): at android.widget.TextView.<init>(TextView.java:768) 10-22 21:22:51.070: W/MenuInflater(21873): at android.widget.TextView.<init>(TextView.java:442) 

Cuando uso el android:actionViewClass para el android:actionViewClass todo trabaja muy bien. He seguido el tutorial desde el sitio web de Android.

Este es mi menú xml

 <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_search" android:actionViewClass="com.actionbarsherlock.widget.SearchView" android:icon="@drawable/ic_action_search" android:showAsAction="ifRoom|collapseActionView" android:title="@string/menu_search"/> <item android:id="@+id/menu_add_page" android:title="@string/menu_add_page" android:icon="@drawable/ic_action_add" android:showAsAction="always" /> <item android:id="@+id/menu_settings" android:title="@string/menu_settings" android:showAsAction="never" /> </menu> 

Y este es el código relevante:

 public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.activity_overview, menu); // Get the SearchView and set the searchable configuration SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); return true; } 

¿Se trata de un error (conocido), o estoy perdiendo algo más aquí?

5 Solutions collect form web for “ActionbarSherlock SearchView en menu.xml da recursos $ NotFoundException”

ActionbarSherlock en ActionbarSherlock es / era un problema conocido. La rama dev contiene el soporte, sin embargo no está completa y parece que todavía están teniendo problemas con Sugerencias.

Vea el github aquí y aquí para la referencia.

Aquí hay un enlace al ActionBarSherlock > ActionBarSherlock Source

Este problema es causado por la falta de ciertos atributos en la versión v-14 de Sherlock Theme.

Lo arreglé agregando

 <item name="textColorPrimary">@color/abs__primary_text_holo_light</item> <item name="textColorPrimaryInverse">@color/abs__primary_text_holo_dark</item> 

Al tema de Sherlock y funciona maravillosamente otra vez. No estoy seguro de si la solución ideal, pero por ahora funciona 🙂

Como hahnjo mencionado aquí :

Si utiliza el tema Theme.Sherlock.Light.DarkActionBar y crear la vista con new SearchView(this) , no funcionará … Combinaciones que funcionarán: Theme.Sherlock.Light.DarkActionBar con new SearchView(getSupportActionBar().getThemedContext()) Theme.Sherlock.Light o Theme.Sherlock.Light con new SearchView(this)

También recibí este error, sin embargo, fue porque no estaba estableciendo el android:theme en el nodo <application> en AndroidManifest.xml .

Una vez que establezca android:theme="@style/Theme.Sherlock" en el nodo <application> , el problema se resolvió.

Me di cuenta de que tenía que hacer todo lo siguiente para que esto funcione:

Asegúrese de que el tema de la aplicación se haya definido en AndroidManifest.xml:

<application android:name="com.xxx.MyApplication" android:theme="@style/AppTheme">

He añadido los ajustes "faltantes" al estilo base:

 <style> <item name="textColorPrimary">@color/abs__primary_text_holo_light</item> <item name="textColorPrimaryInverse">@color/abs__primary_text_holo_dark</item> <item name="searchDropdownBackground">@drawable/abs__search_dropdown_dark</item> <item name="searchViewTextField">@drawable/abs__textfield_searchview_holo_dark</item> <item name="searchViewTextFieldRight">@drawable/abs__textfield_searchview_right_holo_dark</item> <item name="searchViewCloseIcon">@drawable/abs__ic_clear</item> <item name="searchViewSearchIcon">@drawable/abs__ic_search</item> <item name="searchViewGoIcon">@drawable/abs__ic_go</item> <item name="searchViewVoiceIcon">@drawable/abs__ic_voice_search</item> <item name="searchAutoCompleteTextView">@style/Widget.Sherlock.SearchAutoCompleteTextView</item> </style> 

A continuación, actualizó mi Activity.onCreateOptionsMenu () para pasar un "contexto temático" al inflador de menú como:

 @Override public boolean onCreateOptionsMenu(final Menu menu) { final MenuInflater inflater = new MenuInflater(this.getSupportActionBar().getThemedContext()); inflater.inflate(R.menu.main_menu, menu); this.initSearchView(menu); return true; } 

Luego pasó el mismo contexto temático a la creación / inicialización de SearchView:

 private void initSearchView(final Menu menu) { final SearchManager searchManager = (SearchManager) this.getSystemService(Context.SEARCH_SERVICE); final MenuItem searchViewMenuItem = menu.findItem(R.id.menu_search); final SearchView searchView = new SearchView(this.getSupportActionBar().getThemedContext()); searchView.setSearchableInfo(searchManager.getSearchableInfo(this.getComponentName())); searchView.setIconifiedByDefault(false); searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(final View v, final boolean hasFocus) { if (!hasFocus) { // Collapse the searchbox on ActionBar searchViewMenuItem.collapseActionView(); } } }); } 

Espero que esto ayude a alguien o que se "fija" por lo que es sólo funciona.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.