在平板电脑上夸大GridView时出错

时间:2012-02-11 23:17:57

标签: android gridview classcastexception inflate

我在Android应用中使用GridView。一切都在我的手机上完美运行,但当我尝试在平板电脑模拟器上运行应用程序时,它在开始时崩溃了。

错误为E/AndroidRuntime(466): java.lang.RuntimeException: Unable to start activity ComponentInfo{****/***.Main}: java.lang.RuntimeException: Unable to start activity ComponentInfo{***/***.views.calendar.CalendarView}: android.view.InflateException: Binary XML file line #42: Error inflating class android.widget.GridView 第42行只有一个<GridView>标记。

然后堆栈跟踪显示Caused by: android.view.InflateException: Binary XML file line #42: Error inflating class android.widget.GridViewCaused by: java.lang.reflect.InvocationTargetException并完成:

02-11 23:57:17.079: E/AndroidRuntime(466): Caused by: android.content.res.Resources$NotFoundException: File  from drawable resource ID #0x1020004
02-11 23:57:17.079: E/AndroidRuntime(466):  at android.content.res.Resources.loadDrawable(Resources.java:1874)
02-11 23:57:17.079: E/AndroidRuntime(466):  at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
02-11 23:57:17.079: E/AndroidRuntime(466):  at android.widget.AbsListView.<init>(AbsListView.java:711)
02-11 23:57:17.079: E/AndroidRuntime(466):  at android.widget.GridView.<init>(GridView.java:76)
02-11 23:57:17.079: E/AndroidRuntime(466):  at android.widget.GridView.<init>(GridView.java:72)

我不使用任何LayoutParams,我的xml布局如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/calendar_relativeLayout_main"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <RelativeLayout
        android:id="@+id/calendar_relativeLayout_infoBar"
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:background="@color/calendar_infoBar_background" >

        <ImageButton
            android:id="@+id/calendar_imageButton_previousMonth"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentLeft="true"
            android:background="@null"
            android:src="@drawable/ic_calendar_prev" />

        <ImageButton
            android:id="@+id/calendar_imageButton_nextMonth"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:background="@null"
            android:src="@drawable/ic_calendar_next" />

        <TextView
            android:id="@+id/calendar_textView_currentMonth"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:text="February 2012"
            android:textSize="17dp" />

    </RelativeLayout>

    <GridView
        android:id="@+id/calendar_gridView_currentCalendar"
        android:layout_width="fill_parent"
        android:layout_height="240dp"
        android:layout_below="@+id/calendar_relativeLayout_infoBar"
        android:numColumns="7"
        android:isScrollContainer="false"
        android:listSelector="@android:id/empty">
    </GridView>

</RelativeLayout>

我不明白的是,GridView如何在手机上使用并且无法在平板电脑上使用...

提前感谢任何线索......

1 个答案:

答案 0 :(得分:3)

android:listSelector="@android:id/empty"

据我所知listSelector attribute期望引用drawable,而不是id。 @android:id/empty可用于为ListView和GridView声明一个可选的“空”视图,我很确定它并不意味着如上所述。有关详细信息,请参阅ListActivity。尝试引用实际的可绘制(或颜色),例如@null@android:color/transparent使选择器“隐身”(或者只将高度设置为“0”)。

或者,您可能正在使用资源限定符来阻止平板电脑找到适当的资源。请阅读'How Android Finds the Best-matching Resource'解释,了解更多详情。但是,由于您没有直接在GridView声明中引用可绘制资源,我怀疑这是问题所在。