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"/> 
  • El vídeo no se reproduce correctamente en el listview de android
  • Actualizar la posición de la vista debajo de otra vista en Android
  • Lista de posición de los puntos repetidos en getview
  • Tamaño del texto del hilandero Android
  • Diferencia entre OnTouchListener y OnClickListener
  • Android paquete / nombre de la clase en la disposición XML?
  • Agregue un onClickListener en Default GroupIndicator en ExpandableListView
  • Android: ExpandableListView indicador de grupo dibujable que es grande cuando uso mi propio icono
  • El botón no se puede hacer clic en el ListView expandible
  • Cómo cambiar el color del divisor hijo de ExpanableListView por el archivo xml de diseño?
  • ExpandableListView onExpand siempre desplaza el grupo expandido hacia arriba
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.