2013-01-10 41 views
3

當初始化一個tabhost時,我的android應用程序會崩潰。但用戶的崩潰日誌相當奇怪!java.lang.StackOverflowError by setImageResource

大部分崩潰來自Android 2.3.x,在Android 4.x上效果很好。

我可以看到當我involke「setImageResource」代碼跑進infinate遞歸,但我不明白爲什麼。 代碼:

 
    View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false); 
    ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon); 
    icon.setImageResource(drawableId); // crashed 
java.lang.StackOverflowError 
at android.graphics.drawable.StateListDrawable$StateListState.<init>(StateListDrawable.java:257) 
at android.graphics.drawable.StateListDrawable.<init>(StateListDrawable.java:303) 
at android.graphics.drawable.StateListDrawable.<init>(StateListDrawable.java:70) 
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787) 
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728) 
at android.content.res.Resources.loadDrawable(Resources.java:1712) 
at android.content.res.Resources.getDrawable(Resources.java:590) 
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162) 
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787) 
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728) 
at android.content.res.Resources.loadDrawable(Resources.java:1712) 
at android.content.res.Resources.getDrawable(Resources.java:590) 
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162) 
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787) 
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728) 
at android.content.res.Resources.loadDrawable(Resources.java:1712) 
at android.content.res.Resources.getDrawable(Resources.java:590) 
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162) 
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787) 
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728) 
at android.content.res.Resources.loadDrawable(Resources.java:1712) 
at android.content.res.Resources.getDrawable(Resources.java:590) 
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162) 
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787) 
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728) 
at android.content.res.Resources.loadDrawable(Resources.java:1712) 
at android.content.res.Resources.getDrawable(Resources.java:590) 
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162) 
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787) 
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728) 
at android.content.res.Resources.loadDrawable(Resources.java:1712) 
at android.content.res.Resources.getDrawable(Resources.java:590) 
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162) 
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787) 
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728) 
at android.content.res.Resources.loadDrawable(Resources.java:1712) 
at android.content.res.Resources.getDrawable(Resources.java:590) 
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162) 
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787) 
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728) 
at android.content.res.Resources.loadDrawable(Resources.java:1712) 
at android.content.res.Resources.getDrawable(Resources.java:590) 
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162) 
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787) 
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728) 
at android.content.res.Resources.loadDrawable(Resources.java:1712) 
at android.content.res.Resources.getDrawable(Resources.java:590) 
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162) 
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787) 
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728) 
at android.content.res.Resources.loadDrawable(Resources.java:1712) 
at android.content.res.Resources.getDrawable(Resources.java:590) 
at android.widget.ImageView.resolveUri(ImageView.java:564) 
at android.widget.ImageView.setImageResource(ImageView.java:280) 
at com.thankcreate.care.MainActivity.addTab(MainActivity.java:95) 
at com.thankcreate.care.MainActivity.setTabs(MainActivity.java:78) 
at com.thankcreate.care.MainActivity.onCreate(MainActivity.java:36) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1794) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1851) 
at android.app.ActivityThread.access$1500(ActivityThread.java:132) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:143) 
at android.app.ActivityThread.main(ActivityThread.java:4277) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
at dalvik.system.NativeStart.main(Native Method) 
+1

你指的是你的狀態列表中可繪製的同一個狀態列表嗎? – wsanville

+0

請顯示'drawableId'提到的xml文件 – Henry

回答

3

這是通過執行無限循環引起的。這可能是由於用作圖標的drawable中的循環調用引起的。具有指定drawableId的Drawable可能會調用第二個drawable,第二個drawable會調用第一個drawable。

提供您正在使用的繪圖的更多細節。這可能有助於提供更好的答案。

+0

Thanks.I已經自己修復了它,你是對的! – ThankCreate

+0

實際上,我定義了一個選擇器drawable,它有一個可引用的圖像資源。它們具有相同的名稱,並且沒有編譯錯誤,但它確實在android 4.0中有效。在android 2.3中它會崩潰。無論如何,非常感謝! – ThankCreate