2010-11-17 14 views
5

में फ़्रेमलेआउट को फुलाते समय ClassCastException मैं ग्रिड व्यू में फ़्रेमलेआउट को बढ़ाने की कोशिश कर रहा हूं और मुझे अपवाद मिल रहा है।GridView

public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO: Create compound view with image and name overlayed on top 
    FrameLayout personFrame; 
    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     personFrame = (FrameLayout)inflater.inflate(R.layout.thumbnail, null); 
     //personFrame = (FrameLayout)View.inflate(mContext, R.layout.thumbnail, null); 
     personFrame.setLayoutParams(new GridView.LayoutParams(85,85)); 
    } else { 
     personFrame = (FrameLayout) convertView; 
    } 

.... और इतने पर

यहाँ है लेआउट मैं बढ़ा-चढ़ाकर कर रहा हूँ:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="85px" 
android:layout_height="85px"> 
<ImageView 
    android:id="@+id/thumbnail_image" 
    android:layout_height="85px" 
    android:padding="2px" 
    android:layout_width="85px" 
    android:scaleType="centerCrop" /> 
<TextView 
    android:id="@+id/person_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="2dip" 
    android:layout_gravity="center_horizontal|bottom" 

    android:padding="2dip" 

    android:background="#AA000000" 
    android:textColor="#ffffffff" 

    android:text="Me" /> 
</FrameLayout> 

मैं यहाँ एडाप्टर से getView विधि (BaseAdapter का एक उपवर्ग) है साथ और LayoutParams स्पष्ट रूप से स्थापित करने की कोशिश की बिना कर लिया है और मैं एक ही अपवाद हर बार है, जो मिलती है:

E/AndroidRuntime( 420): java.lang.ClassCastException:  android.widget.FrameLayout$LayoutParams 
E/AndroidRuntime( 420): at android.widget.GridView.onMeasure(GridView.java:934) 
E/AndroidRuntime( 420): at android.view.View.measure(View.java:8171) 
E/AndroidRuntime( 420): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132) 
E/AndroidRuntime( 420): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1012) 
E/AndroidRuntime( 420): at android.widget.LinearLayout.measureVertical(LinearLayout.java:381) 
E/AndroidRuntime( 420): at android.widget.LinearLayout.onMeasure(LinearLayout.java:304) 
E/AndroidRuntime( 420): at android.view.View.measure(View.java:8171) 
E/AndroidRuntime( 420): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132) 
E/AndroidRuntime( 420): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 
E/AndroidRuntime( 420): at android.view.View.measure(View.java:8171) 
E/AndroidRuntime( 420): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132) 
E/AndroidRuntime( 420): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 
E/AndroidRuntime( 420): at android.view.View.measure(View.java:8171) 
E/AndroidRuntime( 420): at android.view.ViewRoot.performTraversals(ViewRoot.java:801) 
E/AndroidRuntime( 420): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727) 
E/AndroidRuntime( 420): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime( 420): at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime( 420): at android.app.ActivityThread.main(ActivityThread.java:4627) 
E/AndroidRuntime( 420): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime( 420): at java.lang.reflect.Method.invoke(Method.java:521) 
E/AndroidRuntime( 420): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
E/AndroidRuntime( 420): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
E/AndroidRuntime( 420): at dalvik.system.NativeStart.main(Native Method) 

क्या कोई यह बता सकता है कि मैं यहां गलत कहां गया हूं? बहुत धन्यवाद

उत्तर

-4

ग्रिड व्यू फ़्रेमलाइट नहीं है, दोनों व्यू ग्रुप हैं लेकिन यह फ़्रेमलाउट नहीं है।

+0

यदि मैं GridView.LayoutParams को फ्रेमलेआउट में बदलता हूं। LayoutParams मुझे एक ही स्टैकट्रैक मिलता है, इसलिए मुझे यकीन नहीं है कि आपका क्या मतलब है। –

+0

कि आपको क्लासकास्ट एक्सेप्शन मिलता है, जैसे कि ऐप्पल में केले डालने की कोशिश करना। आप केले को फल में डाल सकते हैं, लेकिन ऐप्पल के लिए नहीं। एंड्रॉइड जावाडोक में पढ़ें इन 2 वर्गों की विरासत क्या है, और इस विषय के सामान्य ज्ञान प्राप्त करने के लिए "जावा विरासत" के लिए वेब में पढ़ें। – apps

+0

मैं समझता हूं कि क्लास कास्ट अपवाद क्या है, मैं पूछ रहा हूं कि इसका क्या कारण है - स्टैकट्रैक पूरी तरह से एसडीके कोड है, इसलिए यह बेहद अस्पष्ट है कि मैं इसे कैसे तोड़ने में कामयाब रहा। मैंने खोज की और खोज की और मुझे यह नहीं पता कि मुझे यह कैसे करना चाहिए (GridView में फ़्रेमलेआउट्स का उपयोग करें) का उपयोग करें। –

0

अच्छी तरह से मुझे नहीं पता कि क्या हो रहा था, लेकिन सेटलेआउट पैराम को हटाकर इसे ठीक किया गया। मुझे नहीं पता कि कोड में उन पैरामीटर को कैसे सेट किया जाए, लेकिन यह आवश्यक नहीं लगता है, तो यह ठीक है। मैंने getView विधि से गलत ऑब्जेक्ट को वापस करने की बेवकूफ गलती भी की, लेकिन यह इस क्रैश को प्रभावित नहीं कर रहा था।

18

वास्तविक रूप से getView से गलत वस्तु को वापस कर रहा है (जैसा कि आपने बताया था कि आप कर रहे थे) अपवाद का कारण बनता है। उदाहरण के लिए यदि आपने फ्रेमलेआउट के बजाय अपने फ्रेमलेआउट के भीतर से एक बटन वापस कर दिया है तो यह आपके द्वारा वर्णित समस्या का कारण बन जाएगा। ग्रिड व्यू कोड आपके द्वारा लौटाए गए व्यू ऑब्जेक्ट को ले रहा है और दृश्य पदानुक्रम को एक कदम ऊपर चला रहा है। वहां यह एक AbsListView (जो प्रत्येक ग्रिड व्यू आइटम को लपेटता है) ढूंढने की अपेक्षा करता है। चूंकि आपने अपने फ्रेमलेआउट के उप-तत्व को वापस कर दिया है, इसलिए ग्रिड व्यू क्लास ने फ़्रेमलाउट पाया जहां इसे AbsListView की उम्मीद थी।

+0

+1 यह सही उत्तर है – onof

+0

हां, यह मेरे लिए भी सही जवाब था, "स्वीकृत" उत्तर भी एक उत्तर नहीं है, इससे कोई भी वास्तव में इस समस्या को हल करने में मदद नहीं करता है –

9

बदलने का प्रयास करें:

personFrame.setLayoutParams(new GridView.LayoutParams(85,85)); 

रहे हैं:

personFrame.setLayoutParams(new AbsListView.LayoutParams(85,85)); 

ऐसा लगता है कि जब आप एक वस्तु की LayoutParams निर्धारित करते हैं, यह डाली करने योग्य होना चाहिए माता पिता की LayoutParams करने के लिए। आपके मामले में, personFrame का अभिभावक ग्रिड व्यू है।

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