2012-02-27 16 views
5

पहले, मेरी अंग्रेजी के लिए खेद है, जब InvocationTargetException के साथ StackOverFlowError। लेआउट को फुलाते समय मेरे पास एक सवाल है:एंड्रॉइड: लेआउट

मेरे पास एक कस्टम व्यू है, जो लाइनरलायआउट से फैला है, जिसे बटन हेल्प कहा जाता है। मैं लोडिंग एक्टिविटी नामक मेरे लेआउट पर उस दृश्य का उपयोग करता हूं। मेरे नीचे कोड निम्न त्रुटियों के साथ, हर उपकरणों और emulators पर पूरी तरह से काम सैमसंग गैलेक्सी वाई तरह 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. 

समस्या है, मैं इस लाइन के बारे में पता नहीं है यह क्यूवीजीए अनुकरणकर्ताओं/उपकरणों पर क्यों होता है?

FYI करें:

  • मैं स्क्रीन 320x480 के लिए ही छवि संसाधन हैं।
  • 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); 
        } 
    } 
    
  • ButtonHelpLoadingActivity में प्रयोग किया जाता है

  • जब मैं बटनहेल्प हटा देता हूं, तब भी ऊपर लॉगआउट की तरह लेआउट बनाते समय त्रुटि दिखाई देती है।

मैंने एक और SO प्रश्न खोजे हैं लेकिन अभी भी इस मामले के लिए कोई समाधान या स्पष्टीकरण नहीं है।

बहुत धन्यवाद!


अद्यतन:

के रूप में पूछा, नीचे हैं 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' drawables क्या हैं? –

+0

@ ए.एच. 'loading_button_help': एक ड्रॉइंग एक्सएमएल बटन कहता है, और 'loading_icon_help' एक छवि खींचने योग्य है। – thaiduy

+0

क्या आप अपने एक्सएमएल प्रदान कर सकते हैं? –

उत्तर

3

loading_button_help.xml में आप @ drawable/loading_button_help का उपयोग करते हैं? मुझे लगता है कि आपके पास चक्रीय संदर्भ है। अपनी एक्सएमएल या छवि फ़ाइल का नाम बदलने का प्रयास करें।

+0

धन्यवाद @appserv। मेरा बुरा, मुझे नहीं पता कि मैं इसे पहली बार क्यों नहीं देखता हूं। – thaiduy

संबंधित मुद्दे