У меня странная трассировка стека от моего приложения на рынке Android.
У меня есть переключатель видов, который содержит два вида, один из которых содержит флажок.
Я получаю эту трассировку стека AdDetailView, имеющую пользовательское представление.
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)
Это происходит в следующем конструкторе представления:
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);
}
Линия 67 - это линия раздувания.
Проблема в том, что я не могу воспроизвести проблему на эмуляторе или устройстве.
Есть указатели?
Вот 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>
вот еще одна раскладка, которая в точности повторяет то же исключение на некоторых устройствах:
<?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>
код, который вызывает исключение:
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"/>