Error al inflacionar la casilla de verificación

Estoy teniendo rastro de pila extraño de mi aplicación en el mercado de Android. Tengo un conmutador de vista que contiene dos vistas, una de ellas contiene una casilla de verificación.

Estoy obteniendo este seguimiento de pila AdDetailView beeing una vista personalizada.

android.view.InflateException: Binary XML file line #29: Error inflating class android.widget.CheckBox at android.view.LayoutInflater.createView(LayoutInflater.java:513) at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563) at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) at android.view.LayoutInflater.inflate(LayoutInflater.java:382) at android.view.LayoutInflater.inflate(LayoutInflater.java:320) at android.view.LayoutInflater.inflate(LayoutInflater.java:276) at com.yakaz.view.AdDetailView.init(AdDetailView.java:67) at com.yakaz.view.AdDetailView.<init>(AdDetailView.java:78) 

Esto sucede en el siguiente constructor de vista:

 private void init(Context context) { LayoutInflater li = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); li.inflate(R.layout.ad_detail_view, this); setOrientation(LinearLayout.VERTICAL); } public AdDetailView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } 

La línea 67 es la línea de inflado.

El problema es que no puedo reproducir el problema, en el emulador o el dispositivo. ¿Alguna puntería?

Aquí está el ad_detail_view.xml

 <?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/preview_warning" style="@style/Notification" android:text="@string/this_is_only_a_preview" android:visibility="gone" /> <ScrollView android:layout_width="fill_parent" android:fadingEdge="none" android:layout_height="fill_parent" android:layout_weight="1" android:fillViewport="true" android:id="@+id/scrolls"> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <include layout="@layout/action_bar" /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="10dp" android:paddingLeft="10dp" android:paddingRight="10dp"> <!-- tags --> <LinearLayout android:id="@+id/tagsLayout" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_weight="1" android:layout_height="wrap_content" /> <CheckBox android:id="@+id/save_button" style="@style/StarButton" android:layout_marginRight="10sp" /> </LinearLayout> <!-- meta --> <Button android:id="@+id/meta" style="@style/Meta" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp"/> <!-- pictures --> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:id="@+id/gallery_container"> <Gallery android:id="@+id/gallery" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> <!-- padded layout --> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="5dp"> <!-- summary --> <TextView android:id="@+id/summary" style="@style/AdDetailSummary" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingBottom="10dp" /> </LinearLayout> <!-- tab --> <LinearLayout android:layout_width="fill_parent" android:orientation="vertical" android:layout_height="wrap_content" android:background="@drawable/bottom_green_bar" android:paddingLeft="10dp"> <TextView android:layout_width="wrap_content" android:id="@+id/tab_title" android:gravity="center" android:layout_height="wrap_content" android:text="@string/member_profile" style="@style/TabLabel" /> </LinearLayout> <!-- user detail --> <LinearLayout android:layout_width="fill_parent" android:orientation="vertical" android:layout_height="wrap_content" android:background="@color/very_light_gray" android:paddingBottom="10dp"> <!-- user item --> <include layout="@layout/user_item" /> <include layout="@layout/website_item" /> </LinearLayout> </LinearLayout> </ScrollView> </merge> 

style.xml:

 <style name="StarButton"> <item name="android:background">@drawable/bk_star_button</item> <item name="android:layout_width">30dp</item> <item name="android:layout_height">30dp</item> <item name="android:button">@android:id/empty</item> </style> 

bk_star_button.xml:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/btn_star_big_off" android:state_checked="false"/> <item android:drawable="@drawable/btn_star_big_on" android:state_checked="true"/> </selector> 

aquí hay otro diseño que como la excepción exacta misma planteada en algún dispositivo:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="@drawable/bk_gradient"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="left|center_vertical" style="@style/TopBar" android:id="@+id/titlebar"> <ImageView android:src="@drawable/logo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:layout_alignParentLeft="true" /> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingLeft="8dp" android:id="@+id/search_progressbar" android:visibility="gone"> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/ProgressBarMedium" /> </FrameLayout> <LinearLayout android:id="@+id/buttons_container" android:gravity="right|center_vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> .... </LinearLayout> </LinearLayout> 

el código que plantea la excepción:

 public static CompoundButton addTitleBarCompoundButton(Context context, View titleBar, CharSequence label, boolean isChecked) { if (!(titleBar instanceof ViewGroup)) return null; ViewGroup group = (ViewGroup) titleBar .findViewById(R.id.buttons_container); // We attach to root during the inflating process othersize layout_ // parameters in the style are ignored LayoutInflater.from(context).inflate(R.layout.topbar_toggle_button, group, true); // Get the result, which is the last child of the group CompoundButton result = (CompoundButton) group.getChildAt(group .getChildCount() - 1); result.setChecked(isChecked); // Set the text result.setText(label); return result; } 

topbar_toggle_button.xml:

 <?xml version="1.0" encoding="utf-8"?> <CheckBox xmlns:android="http://schemas.android.com/apk/res/android" style="@style/BarButton.Toggle"/> 

Sospecho que tiene algo hacer con usted que fija el android:button parámetro del android:button @android:id/empty . ¿Puede usted explicar por qué está haciendo esto? Me parece que has creado vistas personalizadas marcadas / no marcadas a través de un <selector> en el fondo, por lo que el elemento de botón debe ser eliminado. Si mi suposición es correcta, debería hacerlo de esta manera:

 <style name="StarButton"> <item name="android:background">@drawable/bk_star_button</item> <item name="android:layout_width">30dp</item> <item name="android:layout_height">30dp</item> <item name="android:button">@null</item> </style> 

El atributo @null se proporciona como una forma de borrar los atributos predeterminados, mientras que @android:id/empty es el identificador utilizado por el sistema para hacer referencia a la vista "vacía" presentada por AdapterView instancias AdapterView cuando no tienen elementos que mostrar. Esta discrepancia podría causar una serie de comportamientos desconocidos.

Si está llamando inflate desde el constructor de la viewroot , entonces debe llamarlo con el parámetro attachToRoot false :

 li.inflate(R.layout.ad_detail_view, this); 

ya que no se ha instanciado todavía (actualmente está en su constructor).

Pero basándose en el error que se obtiene, esto puede no ser el único problema, por lo que compartir el diseño xml de su ad_detail_view podría ayudar (el error dice que el problema está en el archivo xml, en la línea # 29).

Puede ser (mi sugerencia) que cuando se está definiendo el estilo, no se está dando como estilo de CheckBox predeterminado de los padres. Por lo tanto, en algunos Android / dispositivo que está faltando propiedad que se define en ese padre.

De forma alternativa (ya que esta excepción causa problemas con CheckBox en sí) intente moverlo a su apk (widget.CheckBox.java).

Eso es algo malo que Android Market no le permite comprobar la versión de Android que causa el accidente. ¿Ha intentado ejecutar el emulador con Android 1.5 para comprobar esto?

Tenía el mismo problema, intente usar android.support.v7.widget.AppCompatCheckBox

 <android.support.v7.widget.AppCompatCheckBox android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/crime_solved" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:text="@string/crime_solved_label"/> 
  • ¿Cómo usar correctamente setZOrderMediaOverlay en Android?
  • Onclick en paginador de vista en android no funciona en mi código
  • La construcción de un visor de modelo 3d Android?
  • Java.util.ConcurrentModificationException in View.setVisibility
  • Cómo obtener un elemento de un niño en ExpandableListView?
  • Vista de lista expandible
  • Cómo hacer una rotación de imagen suave en Android?
  • ¿Rellenar ListFragments con una vista personalizada?
  • Ver - buscando un evento como en (Ver) Destruido
  • Android View y ViewGroup
  • Selección de niños en ExpandableListView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.