2013-01-10 3 views
3

탭 호스트를 초기화 할 때 내 안드로이드 앱이 충돌합니다. 그러나 사용자의 크래시 로그가 이상합니다!setImageResource의 java.lang.StackOverflowError

대부분 충돌이 android 2.3.x에서 발생했습니다. android 4.x에서 잘 작동합니다.

"setImageResource"가 내가 코드를 무한 재귀로 실행했을 때 볼 수 있지만 그 이유는 알 수 없습니다. 코드 :

 
    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

이것은 실행 무한 루프에 의해 발생된다. 이 문제는 아이콘으로 사용되는 드로어 블의 순환 호출로 인해 발생할 수 있습니다. 지정한 drawableId의 드로어 블은 두 번째 드로어 블을 호출 할 수 있으며 두 번째 드로잉은 첫 번째 드로잉을 호출합니다.

사용중인 드로어 블에 대한 자세한 내용을 제공하십시오. 더 나은 답변을 제공하는 데 도움이 될 수 있습니다.

+0

감사합니다. 나는 이미 그것을 스스로 고쳤으며, 당신 말이 맞습니다! – ThankCreate

+0

사실 이미지 드로어 블 리소스를 참조하는 셀렉터 드로어 블을 정의했습니다. 물론 그들은 동일한 이름을 가지고 있으며 컴파일 오류가 없지만 실제로 안드로이드 4.0에서 작동합니다. 안드로이드 2.3에서 충돌합니다. 어쨌든, 대단히 감사합니다! – ThankCreate

관련 문제