2012-02-27 2 views
5

첫 번째로, 내 영어를 유감스럽게 생각합니다.Android : 레이아웃을 부 풀릴 때 InvocationTargetException이있는 StackOverFlowError

저는 사용자 정의보기가 있습니다. LinearLayout에서 확장하여 ButtonHelp이라고합니다. 내 레이아웃에서보기를 LoadingActivity으로 사용합니다. 내 아래 코드는 다음과 같은 오류와 함께 삼성 갤럭시 Y 등의 QVGA 스크린을 제외한 모든 장치 및 에뮬레이터에서 완벽하게 작동 :

Caused by: java.lang.StackOverflowError 
    at android.util.LongSparseArray.get(LongSparseArray.java:79) 

:

문제가
FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp/com.myapp.LoadingActivity}: android.view.InflateException: Binary XML file line #45: Error inflating class com.myapp.customviews.ButtonHelp 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:123) 
    at android.app.ActivityThread.main(ActivityThread.java:3683) 
    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) 
Caused by: android.view.InflateException: Binary XML file line #45: Error inflating class com.myapp.customviews.ButtonHelp 
    at android.view.LayoutInflater.createView(LayoutInflater.java:518) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207) 
    at android.app.Activity.setContentView(Activity.java:1657) 
    at com.myapp.LoadingActivity.onCreate(LoadingActivity.java:45) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
    ... 11 more 
Caused by: java.lang.reflect.InvocationTargetException 
    at java.lang.reflect.Constructor.constructNative(Native Method) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:415) 
    at android.view.LayoutInflater.createView(LayoutInflater.java:505) 
    ... 21 more 
Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class android.widget.ImageButton 
    at android.view.LayoutInflater.createView(LayoutInflater.java:518) 
    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
    at com.myapp.customviews.ButtonHelp.initLayout(ButtonHelp.java:29) 
    at com.myapp.customviews.ButtonHelp.<init>(ButtonHelp.java:17) 
    ... 24 more 
Caused by: java.lang.reflect.InvocationTargetException 
    at java.lang.reflect.Constructor.constructNative(Native Method) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:415) 
    at android.view.LayoutInflater.createView(LayoutInflater.java:505) 
    ... 32 more 
Caused by: java.lang.StackOverflowError 
    at android.util.LongSparseArray.get(LongSparseArray.java:79) 
    at android.content.res.Resources.getCachedDrawable(Resources.java:1746) 
    at android.content.res.Resources.loadDrawable(Resources.java:1664) 
    at android.content.res.Resources.getDrawable(Resources.java:581) 
    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:1694) 
    at android.content.res.Resources.getDrawable(Resources.java:581) 
    at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162) 
    at android.graphics.drawable.Drawable.createFromXmlInner(Drawable. 

, 나는이 선에 대해 아무 생각이 없다 왜 QVGA 에뮬레이터/장치에서 발생합니까? 참고로

는 :

  • 나는 화면 320 × 480 단지에 대한 이미지 자료를 가지고있다.
  • ButtonHelp 레이아웃 :

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 
    
    <ImageButton 
        android:id="@+id/btnhelp_help" 
        android:layout_width="40dp" 
        android:layout_height="40dp" 
        android:layout_marginLeft="5dp" 
        android:layout_marginRight="5dp" 
        android:layout_marginTop="5dp" 
        android:background="@drawable/loading_button_help" 
        android:src="@drawable/loading_icon_help" /> 
    </LinearLayout> 
    
  • ButtonHelp 번호 :

    :

    public class ButtonHelp extends LinearLayout { 
        private ImageButton mHelp; 
    
        public ButtonHelp(Context context, AttributeSet attrs) { 
         super(context, attrs); 
         initLayout(); 
         initControls(); 
        } 
    
        public ButtonHelp(Context context) { 
         super(context); 
         initLayout(); 
         initControls(); 
        } 
    
        private void initLayout() { 
         LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
         inflater.inflate(R.layout.btn_help, this); 
        } 
    
        private void initControls() { 
         mHelp = (ImageButton) findViewById(R.id.btnhelp_help); 
        } 
    
        public void setOnClickListener(View.OnClickListener listener) { 
         mHelp.setOnClickListener(listener); 
        } 
    } 
    
  • ButtonHelp는 LoadingActivity에 사용

  • ButtonHelp을 제거하면 위의 logcat과 마찬가지로 레이아웃을 만들 때 오류가 계속 표시됩니다.

다른 SO 질문을 검색했지만이 경우에는 해결책이나 설명이 없습니다.

감사합니다.


UPDATE : loading_button_help에 대한 질문으로

, 다음과 같습니다 코드 :

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_window_focused="false" android:state_enabled="true" 
     android:drawable="@drawable/loading_button_help" /> <!-- Normal --> 

    <item android:state_window_focused="false" android:state_enabled="false" 
     android:drawable="@drawable/loading_button_help" /> <!-- Normal disable --> 

    <item android:state_pressed="true" 
     android:drawable="@drawable/loading_button_help_press" /> <!-- pressed --> 

    <item android:state_focused="true" android:state_enabled="true" 
     android:drawable="@drawable/loading_button_help" /> <!-- selected --> 

    <item android:state_enabled="true" 
     android:drawable="@drawable/loading_button_help" /> <!-- normal --> 

    <item android:state_focused="true" 
     android:drawable="@drawable/loading_button_help" /> <!-- normal disable focused --> 

    <item 
     android:drawable="@drawable/loading_button_help" /> <!-- normal disable --> 
</selector> 

그리고 loading_icon_help 그냥 PNG 이미지입니다.

+0

'loading_button_help' 및'loading_icon_help' 드로어 블은 무엇입니까? –

+0

@ a.ch. 'loading_button_help' : drawable xml은 버튼 상태를 정의하고,'loading_icon_help'는 이미지 드로어 블입니다. – thaiduy

+0

xml을 제공 할 수 있습니까? –

답변

3

loading_button_help.xml에서 @ drawable/loading_button_help를 사용합니까? 순환 참조가 있다고 생각합니다. XML 또는 이미지 파일의 이름을 바꾸십시오.

+0

감사합니다. @appserv. 나의 나쁜, 내가 처음에 그것을 알아 채지 못하는 이유를 모르겠다. – thaiduy

관련 문제