【问题标题】:force close when inflate layout膨胀布局时强制关闭
【发布时间】:2013-09-30 09:28:19
【问题描述】:

我在我的程序中使用了布局充气器。在 Android 4 中一切都很好,但在 android 2.2 中使用时,程序会因运行时错误(强制关闭)而终止。

问题出在哪里?

部分代码:

Log.i("Hossein", "1");
    
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
    Log.i("Hossein", "2");
    
    View itemView = inflater.inflate(R.layout.drawer_list_item, parent,
            false);

    Log.i("Hossein", "3");

布局代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="?attr/spinnerDropDownItemStyle"
    android:layout_width="match_parent"
    android:layout_height="?attr/dropdownListPreferredItemHeight"
    android:background="?android:attr/activatedBackgroundIndicator"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:adjustViewBounds="true" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center_vertical|left"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/title"
            style="?attr/spinnerDropDownItemStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:singleLine="true" />

        <TextView
            android:id="@+id/subtitle"
            style="?attr/spinnerDropDownItemStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:singleLine="true"
            android:textAppearance="?attr/textAppearanceSmall" />
    </LinearLayout>

</LinearLayout>

Logcat 消息:

09-30 11:26:32.934:I/侯赛因(416):1

09-30 11:26:32.934:I/侯赛因(416):2

09-30 11:26:32.974: D/AndroidRuntime(416): 关闭虚拟机

09-30 11:26:32.974: W/dalvikvm(416): threadid=1: 线程以未捕获的异常退出 (group=0x4001d800)

09-30 11:26:33.034:E/AndroidRuntime(416):致命异常:main

09-30 11:26:33.034: E/AndroidRuntime(416): android.view.InflateException: Binary XML file line #1: Error inflating class

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.view.LayoutInflater.createView(LayoutInflater.java:513)

09-30 11:26:33.034: E/AndroidRuntime(416): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:385)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:320)

09-30 11:26:33.034:E/AndroidRuntime(416):在 com.androidbegin.sidemenututorial.MenuListAdapter.getView(MenuListAdapter.java:56)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.widget.AbsListView.obtainView(AbsListView.java:1315)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.widget.ListView.makeAndAddView(ListView.java:1727)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.widget.ListView.fillDown(ListView.java:652)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.widget.ListView.fillFromTop(ListView.java:709)

09-30 11:26:33.034:E/AndroidRuntime(416):在 android.widget.ListView.layoutChildren(ListView.java:1580)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.widget.AbsListView.onLayout(AbsListView.java:1147)

09-30 11:26:33.034: E/AndroidRuntime(416): at android.view.View.layout(View.java:7035)

09-30 11:26:33.034: E/AndroidRuntime(416): at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:702)

09-30 11:26:33.034: E/AndroidRuntime(416): at android.view.View.layout(View.java:7035)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.widget.FrameLayout.onLayout(FrameLayout.java:333)

09-30 11:26:33.034: E/AndroidRuntime(416): at android.view.View.layout(View.java:7035)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.widget.LinearLayout.onLayout(LinearLayout.java:1042)

09-30 11:26:33.034: E/AndroidRuntime(416): at android.view.View.layout(View.java:7035)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.widget.FrameLayout.onLayout(FrameLayout.java:333)

09-30 11:26:33.034: E/AndroidRuntime(416): at android.view.View.layout(View.java:7035)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.widget.FrameLayout.onLayout(FrameLayout.java:333)

09-30 11:26:33.034: E/AndroidRuntime(416): at android.view.View.layout(View.java:7035)

09-30 11:26:33.034:E/AndroidRuntime(416):在 android.view.ViewRoot.performTraversals(ViewRoot.java:1045)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.view.ViewRoot.handleMessage(ViewRoot.java:1727)

09-30 11:26:33.034: E/AndroidRuntime(416): at android.os.Handler.dispatchMessage(Handler.java:99)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.os.Looper.loop(Looper.java:123)

09-30 11:26:33.034: E/AndroidRuntime(416): at android.app.ActivityThread.main(ActivityThread.java:4627)

09-30 11:26:33.034: E/AndroidRuntime(416): at java.lang.reflect.Method.invokeNative(Native Method)

09-30 11:26:33.034: E/AndroidRuntime(416): at java.lang.reflect.Method.invoke(Method.java:521)

09-30 11:26:33.034: E/AndroidRuntime(416): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

09-30 11:26:33.034: E/AndroidRuntime(416): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

09-30 11:26:33.034: E/AndroidRuntime(416): at dalvik.system.NativeStart.main(Native Method)

09-30 11:26:33.034: E/AndroidRuntime(416): Caused by: java.lang.reflect.InvocationTargetException

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.widget.LinearLayout.(LinearLayout.java:115)

09-30 11:26:33.034: E/AndroidRuntime(416): at java.lang.reflect.Constructor.constructNative(Native Method)

09-30 11:26:33.034: E/AndroidRuntime(416): at java.lang.reflect.Constructor.newInstance(Constructor.java:446)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.view.LayoutInflater.createView(LayoutInflater.java:500)

09-30 11:26:33.034: E/AndroidRuntime(416): ... 34 更多

09-30 11:26:33.034:E/AndroidRuntime(416):原因:android.content.res.Resources$NotFoundException:来自可绘制资源 ID #0x0 的文件 res/drawable/list_selector_background.xml

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.content.res.Resources.loadDrawable(Resources.java:1697)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.content.res.TypedArray.getDrawable(TypedArray.java:601)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.view.View.(View.java:1885)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.view.View.(View.java:1834)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.view.ViewGroup.(ViewGroup.java:285)

09-30 11:26:33.034: E/AndroidRuntime(416): ... 38 更多

09-30 11:26:33.034: E/AndroidRuntime(416): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/list_selector_background.xml from xml type drawable resource ID #0x0

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.content.res.Resources.loadXmlResourceParser(Resources.java:1924)

09-30 11:26:33.034: E/AndroidRuntime(416): 在 android.content.res.Resources.loadDrawable(Resources.java:1692)

09-30 11:26:33.034: E/AndroidRuntime(416): ... 42 更多

09-30 11:26:33.143: D/dalvikvm(416): GC_FOR_MALLOC 在 102 毫秒内释放了 3421 个对象 / 286952 个字节

09-30 11:26:35.735:I/Process(416):发送信号。 PID:416 SIG:9

【问题讨论】:

  • 你能显示你的 list_selector_background.xml 吗?

标签: android android-layout


【解决方案1】:
// try this way
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              style="?android:spinnerDropDownItemStyle"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="horizontal" >

    <ImageView
            android:id="@+id/icon"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:adjustViewBounds="true" />

    <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center_vertical|left"
            android:orientation="vertical" >

        <TextView
                android:id="@+id/title"
                style="?android:spinnerDropDownItemStyle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ellipsize="end"
                android:singleLine="true" />

        <TextView
                android:id="@+id/subtitle"
                style="?android:spinnerDropDownItemStyle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ellipsize="end"
                android:singleLine="true"
                android:textAppearance="?android:textAppearanceSmall" />
    </LinearLayout>

</LinearLayout>

【讨论】:

    【解决方案2】:

    activatedBackgroundIndicator attribute 是在 API 级别 11 (Android 3.0) 中引入的。

    将根布局中的 android:background="?android:attr/activatedBackgroundIndicator" 替换为所有目标 API 级别上可用的内容,或使用 alternative resources 机制在 pre-11 和其他布局之间进行切换。

    请注意,堆栈跟踪提到了list_selector_background.xml - 您确定这是导致此堆栈跟踪的确切代码吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多