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.
- Altura dinámica de Android ExpandableListView
- Establecer diferentes indicadores para diferentes grupos en android
- ¿Cuál es la manera correcta de ampliar EditText para darle funcionalidad adicional "predeterminada"
- Reemplazar fragmento dentro de un ViewPager
- Android 4.1 webview javascript no funciona.
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"/>
- ¿Por qué onTouchEvent de SurfaceView llamado unos segundos retrasados?
- Acceso a TextView de viewview de groupview desde getChildView () de ExpandableListView
- Cómo aplicar un filtro de color a una vista con todos los niños
- Manejo de la rotación de la pantalla en WebView
- Vistas superpuestas en Android
- ExpandableListView Group View Expand Predeterminado
- Ver los valores devueltos getHeight () y getWidth () demasiado grandes
- SurfaceView en ScrollView en 4.1
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"/>