3

スマートフォンの Android 4.1 から 4.2 への新しい更新以降、アプリは ViewPager とそのアクティビティを初期化するときに例外をスローします。

例外:

java.lang.IllegalStateException: この LayerDrawable の 1 つ以上の子が一定の状態を持っていません。このドローアブルは変更できません。

スタックトレース:

java.lang.RuntimeException: Unable to start activity ComponentInfo{imatuve.info/imatuve.news.NewsTabActivity}: android.view.InflateException: Binary XML file line #3: Error inflating class <unknown>
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
   at android.app.ActivityThread.access$600(ActivityThread.java:141)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:137)
   at android.app.ActivityThread.main(ActivityThread.java:5039)
   at java.lang.reflect.Method.invokeNative(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:511)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
   at dalvik.system.NativeStart.main(Native Method)Caused by: android.view.InflateException: Binary XML file line #3: Error inflating class <unknown>
   at android.view.LayoutInflater.createView(LayoutInflater.java:613)
   at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
   at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
   at imatuve.news.NewsTabActivity.createTabView(NewsTabActivity.java:313)
   at imatuve.news.NewsTabActivity.initialiseTabHost(NewsTabActivity.java:261)
   at imatuve.news.NewsTabActivity.onCreate(NewsTabActivity.java:96)
   at android.app.Activity.performCreate(Activity.java:5104)
   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
   ... 11 more
    Caused by: java.lang.reflect.InvocationTargetException
   at java.lang.reflect.Constructor.constructNative(Native Method)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
   at android.view.LayoutInflater.createView(LayoutInflater.java:587)
... 23 more
    Caused by: android.content.res.Resources$NotFoundException: File res/drawable/tab_bg_selector.xml from drawable resource ID #0x7f020065
   at android.content.res.Resources.loadDrawable(Resources.java:1953)
   at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
   at android.view.View.<init>(View.java:3328)
   at android.view.View.<init>(View.java:3257)
   at android.view.ViewGroup.<init>(ViewGroup.java:425)
   at android.widget.RelativeLayout.<init>(RelativeLayout.java:210)
   ... 26 more
    Caused by: java.lang.IllegalStateException: One or more children of this LayerDrawable does not have constant state; this drawable cannot be mutated.
   at android.graphics.drawable.LayerDrawable.mutate(LayerDrawable.java:579)
   at android.graphics.drawable.DrawableContainer.selectDrawable(DrawableContainer.java:315)
   at android.graphics.drawable.StateListDrawable.onStateChange(StateListDrawable.java:106)
   at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:189)
   at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:885)
   at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822)
   at android.content.res.Resources.loadDrawable(Resources.java:1950)
   ... 31 more

コード:

private static View createTabView(final Context context, final String tag) {

            //The exception comes when inflating the view
            View view = LayoutInflater.from(context).inflate(R.layout.tabs_bg, null);

    TextView tv = (TextView)view.findViewById(R.id.tabsText);
    tv.setText(tag);

    return view;
}

tab_bg_selector.xml:

<?xml version="1.0" encoding="utf-8"?>

<!--  Active tab -->
<item android:state_selected="true" android:state_focused="false"
    android:state_pressed="false" android:drawable="@drawable/tab_bg_selected" />
<!--  Inactive tab -->
<item android:state_selected="false" android:state_focused="false"
    android:state_pressed="false" android:drawable="@drawable/tab_bg_unselected" />
<!--  Pressed tab -->
<item android:state_pressed="true" android:drawable="@drawable/tab_bg_pressed" />
<!--  Selected tab  -->
<item android:state_focused="true" android:state_selected="true"
    android:state_pressed="false" android:drawable="@color/transparent" />

tab_pg_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >   
<item
    android:bottom="8dp"
    android:top="63dp">
    <shape android:shape="rectangle" >
        <solid android:color="#70c0e7fd" />
    </shape>
</item>

<!-- mask out the bottom line of the tab shape -->
<item
    android:left="15dp"
    android:right="15dp"
    android:top="63dp">
    <shape android:shape="rectangle" >
        <corners android:bottomLeftRadius="0dp"
             android:bottomRightRadius="0dp" 
             android:topLeftRadius="3dp"
             android:topRightRadius="3dp" />

        <solid android:color="#70c0e7fd" />
    </shape>
</item>  

tab_bg_selected.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:bottom="8dp"
    android:top="63dp">
    <shape android:shape="rectangle" >
        <solid android:color="#ffc0e7fd" />
    </shape>
</item>

<!-- mask out the bottom line of the tab shape -->
<item
    android:left="15dp"
    android:right="15dp"
    android:top="63dp">
    <shape android:shape="rectangle" >
        <corners android:bottomLeftRadius="0dp"
             android:bottomRightRadius="0dp" 
             android:topLeftRadius="3dp"
             android:topRightRadius="3dp" />

        <solid android:color="#ffc0e7fd" />
    </shape>
</item> 

tab_bg_unselected.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
</layer-list>

「tabs_bg」レイアウトは、res/drawable/tab_bg_selector.xml と同じように、私のレイアウト フォルダーにあります。

Android 4.1 OS 以下では、この例外は発生しません。これは何であり、どうすればそれを取り除くことができますか?

4

1 に答える 1

3

問題を見つけました。これはtab_bg_unselected.xmlにあります。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
</layer-list>

明らかに、Android 4.2では、レイヤーリストに少なくとも1つの子が必要です。だから私はリストにアイテムを追加しました、そしてアプリは再び例外をスローしません!

しかし、「空の」アイテムを追加するだけでは十分ではありません。また、形などのコンテンツである必要があります。

于 2012-11-30T08:40:37.743 に答える