ActionBarSherlock & ShareActionProvider causar InflateException
Im un edificio de una aplicación que utiliza ActionBarSherlock y es ShareActionProvider para generar una intención de otras aplicaciones. Creé el artículo basado en el código de la muestra de la página del github de la biblioteca; Al principio, trabajé impecablemente. Sin embargo, un día después de eso, simplemente dejó de funcionar. Si elimino el código con respecto a la inflación del menú, la actividad se carga normalmente, de lo contrario se bloquea con la siguiente excepción:
05-31 22:28:41.200: E/AndroidRuntime(15874): FATAL EXCEPTION: main 05-31 22:28:41.200: E/AndroidRuntime(15874): android.view.InflateException: Binary XML file line #26: Error inflating class <unknown> 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.view.LayoutInflater.createView(LayoutInflater.java:613) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.actionbarsherlock.widget.ActivityChooserView.<init>(ActivityChooserView.java:229) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.actionbarsherlock.widget.ActivityChooserView.<init>(ActivityChooserView.java:202) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.actionbarsherlock.widget.ActivityChooserView.<init>(ActivityChooserView.java:192) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.actionbarsherlock.widget.ShareActionProvider.onCreateActionView(ShareActionProvider.java:164) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.actionbarsherlock.internal.view.ActionProviderWrapper.onCreateActionView(ActionProviderWrapper.java:23) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.view.ActionProvider.onCreateActionView(ActionProvider.java:98) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.android.internal.view.menu.MenuItemImpl.getActionView(MenuItemImpl.java:580) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.android.internal.view.menu.ActionMenuPresenter.getItemView(ActionMenuPresenter.java:235) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.android.internal.view.menu.ActionMenuPresenter.flagActionItems(ActionMenuPresenter.java:513) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.android.internal.view.menu.MenuBuilder.flagActionItems(MenuBuilder.java:1048) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.android.internal.view.menu.BaseMenuPresenter.updateMenuView(BaseMenuPresenter.java:91) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.android.internal.view.menu.ActionMenuPresenter.updateMenuView(ActionMenuPresenter.java:268) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.android.internal.view.menu.MenuBuilder.dispatchPresenterUpdate(MenuBuilder.java:244) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.android.internal.view.menu.MenuBuilder.onItemsChanged(MenuBuilder.java:946) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.android.internal.view.menu.MenuBuilder.startDispatchingItemsChanged(MenuBuilder.java:969) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:488) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:819) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:3148) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.os.Handler.handleCallback(Handler.java:615) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.os.Handler.dispatchMessage(Handler.java:92) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.os.Looper.loop(Looper.java:137) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.app.ActivityThread.main(ActivityThread.java:4898) 05-31 22:28:41.200: E/AndroidRuntime(15874): at java.lang.reflect.Method.invokeNative(Native Method) 05-31 22:28:41.200: E/AndroidRuntime(15874): at java.lang.reflect.Method.invoke(Method.java:511) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 05-31 22:28:41.200: E/AndroidRuntime(15874): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 05-31 22:28:41.200: E/AndroidRuntime(15874): at dalvik.system.NativeStart.main(Native Method) 05-31 22:28:41.200: E/AndroidRuntime(15874): Caused by: java.lang.reflect.InvocationTargetException 05-31 22:28:41.200: E/AndroidRuntime(15874): at java.lang.reflect.Constructor.constructNative(Native Method) 05-31 22:28:41.200: E/AndroidRuntime(15874): at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.view.LayoutInflater.createView(LayoutInflater.java:587) 05-31 22:28:41.200: E/AndroidRuntime(15874): ... 33 more 05-31 22:28:41.200: E/AndroidRuntime(15874): Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x7f01000f a=-1} 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.content.res.Resources.loadDrawable(Resources.java:1925) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.view.View.<init>(View.java:3436) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.view.ViewGroup.<init>(ViewGroup.java:432) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.widget.FrameLayout.<init>(FrameLayout.java:101) 05-31 22:28:41.200: E/AndroidRuntime(15874): at android.widget.FrameLayout.<init>(FrameLayout.java:97) 05-31 22:28:41.200: E/AndroidRuntime(15874): ... 36 more
Como puede ver, no hay nada que apunte a mi código; Seguí el problema hasta la primera línea de este método:
- Yo uso ShareActionProvider en PopupMenu, pero mostrar dos PopupMenu?
- ¿Cuál es el uso del espacio de nombres de aplicaciones en android xml
- Cómo puedo obtener mi ShareActionProvider para enviar texto dinámicamente (de los oyentes) ver buscapersonas etc
- Compartir imagen y texto a través de whatsapp
- ¿Cómo ocultar el icono de acción compartida (que utiliza más) cerca del proveedor de acciones compartidas?
public class NewsDetailActivity extends SherlockFragmentActivity{ . . . @Override public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.news_detail, menu); //mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.share).getActionProvider(); //mShareActionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME); return super.onCreateOptionsMenu(menu); }
Si se elimina esa línea, la actividad funciona bien. El diseño del menú se muestra a continuación:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/share" android:title="@string/share" android:showAsAction="ifRoom" android:actionProviderClass="com.actionbarsherlock.widget.ShareActionProvider"/> </menu>
No he podido resolver el problema y no he podido encontrar a alguien con un problema similar. Sin embargo, leí en el wiki de la biblioteca que los temas podrían ser el problema, el siguiente es el tema de mi aplicación y barra de acción, lo he cambiado a Theme.Sherlock.Light y muchos otros en vano.
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="AppBaseTheme" parent="Theme.Sherlock"> <item name="actionBarStyle">@style/ActionBar</item> <item name="android:actionBarStyle">@style/ActionBar</item> </style> <style name="ActionBar" parent="@style/Widget.Sherlock.ActionBar"> <item name="android:textColor">#ffffff</item> <item name="android:textStyle">bold</item>> <item name="android:background">@drawable/background_actionbar</item> <item name="android:backgroundStacked">@drawable/background_actionbar</item> <item name="android:backgroundSplit">@drawable/background_actionbar</item> </style> </resources>
Estoy usando la última versión de la biblioteca. ¡Espero que alguien me ayude! ¡Gracias!
EDIT: No he sido capaz de resolver el problema, pero rastreé la Excepción hasta este XML en ActionBarSherlock (layout / abs_activity_chooser_view.xml):
<com.actionbarsherlock.internal.widget.IcsLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/abs__activity_chooser_view_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" style="?attr/activityChooserViewStyle"> <FrameLayout android:id="@+id/abs__expand_activities_button" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="center" android:focusable="true" android:addStatesFromChildren="true" android:background="?attr/actionBarItemBackground"> <ImageView android:id="@+id/abs__image" android:layout_width="56dip" android:layout_height="36dip" android:layout_gravity="center" android:paddingTop="2dip" android:paddingBottom="2dip" android:paddingLeft="12dip" android:paddingRight="12dip" android:scaleType="fitCenter" android:adjustViewBounds="true" /> </FrameLayout> <FrameLayout android:id="@+id/abs__default_activity_button" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="center" android:focusable="true" android:addStatesFromChildren="true" android:background="?attr/actionBarItemBackground"> <ImageView android:id="@+id/abs__image" android:layout_width="56dip" android:layout_height="36dip" android:layout_gravity="center" android:paddingTop="2dip" android:paddingBottom="2dip" android:paddingLeft="12dip" android:paddingRight="12dip" android:scaleType="fitCenter" android:adjustViewBounds="true" /> </FrameLayout> </com.actionbarsherlock.internal.widget.IcsLinearLayout>
Parece que la excepción es causada por FrameLayout.
EDIT 2: Ok, he encontrado una manera de detener la aplicación de estrellarse. Quité el tema personalizado de mi aplicación y el estilo de la barra de acción, dejando el tema de la aplicación como:
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/Theme.Sherlock" >
Esto funciona bien, sin embargo, he perdido la posibilidad de personalizar la barra de acción .
- Excepción de puntero nulo al usar el proveedor de acciones de la biblioteca de soporte
- ¿Cómo desactivas el historial de acciones cuando usas ShareActionProvider?
- onPrepareSubMenu en un ActionProvider personalizado nunca llamado
- Sólo cuatro opciones para ShareActionProvider con ActionBarSherlock
- Configuración de un icono de recurso compartido en Actionbar ShareActionProvider
- Actualizar texto de ShareActionProvider
- Android: XML personalizado para ShareActionProvider
- Cómo diseñar el Share Action Provider en Android
Cambia el estilo de tu actividad a android: theme = "@ style / Theme.Sherlock" en AndroidManifest.xml
Algo como esto
<activity android:name=".MainActivity" android:theme="@style/Theme.Sherlock"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
Si establece el tema en onCreate, podrá utilizar sus estilos personalizados sin obtener errores o bloqueos.
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme(R.style.YourCustomTheme); ...}
No se siente como si llegara a la raíz del problema, pero al menos le da algunas opciones.
Tuve el mismo problema, pero estaba creando el ShareActionProvider de código. Usar getSupportActionBar().getThemedContext()
para el primer argumento en ShareActionProvider's
constructor ShareActionProvider's
resolvió esto.
Supongo que este es un tema tema. Trata de cambiar:
<style name="ActionBar" parent="@style/Widget.Sherlock.ActionBar">
a
<style name="ActionBar" parent="Widget.Sherlock.ActionBar.Solid">
- Android: cómo escalar una imagen para llenar el fondo de un LinearLayout sin preservar la relación de aspecto?
- Cómo borrar la alerta de notificación Push en la barra de estado – android