10

मुझे एक्शनबार और कुछ टुकड़े मिल गए। समस्या मेरी होमस्क्रीन है। बाईं तरफ एक सिंहावलोकन टुकड़ा है और दाईं तरफ एक विस्तार टुकड़ा है। मेरा टैबलिस्टर गतिशील है इसलिए मैं अपने लेआउट का वजन प्रोग्रामेटिक रूप से सेट करना चाहता हूं।क्लासकास्टएक्सप्शन लीनियरआउटआउट लेआउट पैराम

12-22 16:00:37.620: W/System.err(7235): java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams 
12-22 16:00:37.625: W/System.err(7235):  at com.coover.eu.lostandfound.ListSearchFragment.onViewCreated(ListSearchFragment.java:184) 
12-22 16:00:37.625: W/System.err(7235):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:884) 
12-22 16:00:37.630: W/System.err(7235):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) 
12-22 16:00:37.630: W/System.err(7235):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622) 
12-22 16:00:37.630: W/System.err(7235):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) 
12-22 16:00:37.630: W/System.err(7235):  at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:505) 
12-22 16:00:37.630: W/System.err(7235):  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1178) 
12-22 16:00:37.635: W/System.err(7235):  at android.app.Activity.performStart(Activity.java:5216) 
12-22 16:00:37.635: W/System.err(7235):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2083) 
12-22 16:00:37.635: W/System.err(7235):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 
12-22 16:00:37.635: W/System.err(7235):  at android.app.ActivityThread.access$700(ActivityThread.java:140) 
12-22 16:00:37.635: W/System.err(7235):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 
12-22 16:00:37.640: W/System.err(7235):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-22 16:00:37.640: W/System.err(7235):  at android.os.Looper.loop(Looper.java:137) 
12-22 16:00:37.640: W/System.err(7235):  at android.app.ActivityThread.main(ActivityThread.java:4921) 
12-22 16:00:37.640: W/System.err(7235):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-22 16:00:37.640: W/System.err(7235):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-22 16:00:37.645: W/System.err(7235):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
12-22 16:00:37.645: W/System.err(7235):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
12-22 16:00:37.645: W/System.err(7235):  at dalvik.system.NativeStart.main(Native Method) 

लेआउट कि फुलाया जाता है:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:id="@+id/container_found_list_overview"> 

    <EditText android:id="@+id/search_box" 
     android:layout_width="fill_parent" 
     android:layout_height="50dp" 
     android:padding="5dp" 
     android:textSize="35sp" 
     android:hint="@string/search" 
     android:inputType="text" 
     android:maxLines="1"/> 
    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/overview_list_view"> 
    </ListView> 

</LinearLayout> 

कोड:


      LinearLayout myView = (LinearLayout)this.getView().findViewById(R.id.container_found_list_overview); 
      Log.d("found container", ""+(myView != null)); 
      try{ 
       LayoutParams lp = (LayoutParams) myView.getLayoutParams(); 
       lp.weight = 1; 
       lp.width = 0; 
       myView.setLayoutParams(lp); 
      } 
      catch(RuntimeException e){ 
       Log.e("cant get layoutparams",e.getMessage()); 
       e.printStackTrace(); 
      } 
+0

[? जब dyanmically RelativeLayout सम्मिलित करने का प्रयास ClassCastException हो रही] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/10045360/getting-classcastexception-when -ट्रीइंग-टू-डालने-रिलेटिवेलआउट-डायनैमिकली) – ForceMagic

उत्तर

31

क्या हो रहा है यह है कि किसी दृश्य के LayoutParams वास्तव में माता पिता के प्रकार के कर रहे हैं। इस मामले में आपको FrameLayout$LayoutParams मिल रहा है क्योंकि आपका LinearLayout फ़्रेमलेआउट के अंदर है।

यह माता-पिता का प्रकार क्यों है? ऐसा इसलिए है क्योंकि वे जानकारी संग्रहीत करते हैं जो माता-पिता के लिए उन्हें बाहर रखना उपयोगी होता है। यदि आप EditText या ListView के लिए लेआउट पैरामीटर पुनर्प्राप्त करना चाहते हैं तो आपको LinearLayout$LayoutParams मिल जाएगा।

+0

आपको बहुत धन्यवाद, यह अभी ठीक काम करता है। लेआउट_वेट के बजाय मैं लेआउट_ग्रैविटी का उपयोग करता हूं और गतिशील रूप से – Ceryni

+0

स्वीट बदलता हूं! अगर इस उत्तर में मदद मिली है, तो आपको इसे स्वीकार करना चाहिए (बाईं ओर स्थित चेकमार्क)। – dmon

+0

आह ठीक है आपकी सलाह के लिए धन्यवाद। Stackoverflow पर मेरा पहला प्रश्न – Ceryni

1

अपवाद स्पष्ट रूप से कहा गया है कि आप जब भी मैं अपने LinearLayout की Layoutparams प्राप्त करने की कोशिश मैं एक ClassCastException मिल FrameLayout को LinearLayout पर डालने की कोशिश कर रहे हैं। इस के साथ

LayoutParams lp = (LayoutParams) myView.getLayoutParams(); 

:: यह ListSearchFragment.java फ़ाइल में onViewCreated() विधि में होता है लाइन 184. तो यह की जगह

LinearLayout.LayoutParams lp = 
        (LinearLayout.LayoutParams) myView.getLayoutParams(); 

इससे पहले कि आप ऐसा करते हैं, तो आप अपने माउस सूचक LayoutParams पर होवर कर सकते हैं अपने वर्तमान कोड और बबल में देखें कि वास्तव में यह android.widget.RelativeLayout.LayoutParams है इसलिए आपका अपवाद। देखें:

enter image description here

+0

यह काम नहीं करता है। बिल्कुल एक ही अपवाद। उपर्युक्त स्वीकृत उत्तर को देखते हुए - यह बिल्कुल संभव नहीं है। मुझे यह जानकर खुशी होगी कि मैं गलत हूं। – halxinate

0

इस अपवाद के लिए एक और कारण है (या बग) है:

दृश्य की आईडी भी एक और लेआउट में किया जा रहा है, तो यह जनक दोनों लेआउट में इस्तेमाल विचारों के लिए LayoutParams कास्ट करने के लिए कोशिश करेंगे।

समाधान: न विभिन्न लेआउट :) में एक ही आईडी का उपयोग