10

Bir Actionbar ve bazı Fragments'ım var. Sorun benim ana ekranım. Sol tarafta bir genel bakış ve sağ tarafta bir detay Fragmanı var. TabListener'im Dinamiktir, bu yüzden Düzenim'in ağırlığını programlı olarak ayarlamak istiyorum.ClassCastException LinearLayout LayoutParams

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) 

Düzeni şişirildiği:

<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> 

kodu:


      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 eklemeye çalışırken ClassCastException Alma] olası yinelenen (http://stackoverflow.com/questions/10045360/getting-classcastexception-when -yatak-göreli-göreli-dyanmik olarak) – ForceMagic

cevap

31

bir görünümün LayoutParams aslında ebeveyn türü olmasıdır. Bu durumda, LinearLayout öğeniz bir FrameLayout içinde olduğundan FrameLayout$LayoutParams alıyorsunuz.

Neden ebeveynin türü? Bunun nedeni, ebeveynin bunları ortaya çıkarması için yararlı olan bilgileri saklamasıdır. EditText veya ListView için düzen parametrelerini almak için LinearLayout$LayoutParams alırsınız. Bu istisna için başka bir neden (veya hata) yoktur

+0

Çok teşekkür ederim, şimdi iyi çalışıyor. Layout_weight yerine layout_gravity kullanın ve genişliği dinamik olarak değiştiriyorum – Ceryni

+0

Sweet! Bu cevap yardımcı olursa, onu kabul etmelisiniz (soldaki onay işareti). – dmon

+0

Ah ok Tavsiyeniz için teşekkür ederim. Benim ilk sorum stackoverflow at – Ceryni

1

İstisna açıkça size belirtmektedir benim LinearLayout ait Layoutparams elde etmeye çalışmak zaman ben bir ClassCastException olsun 'u LinearLayout'a göndermeye çalışıyor. Bu ListSearchFragment.java dosyasında onViewCreated() yönteminde oluşur, satır 184. Yani bu değiştirin:

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

bununla: Bunu yapmadan önce

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

, içeri LayoutParams üzerine fare imlecini edebilirsiniz Geçerli kodu ve aslında balonun içinde olduğunu görüyoruz ki bu istisna durumunuzu android.widget.RelativeLayout.LayoutParams. Bkz: Neler oluyor

enter image description here

+0

Bu işe yaramaz. Tam olarak aynı istisna. Yukarıda kabul edilen cevaba bakarak - hiç mümkün DEĞİLDİR. Yanlış olduğumu bilmekten mutluluk duyacağım. – halxinate

0

:

görünümün kimliği de başka düzende kullanılıyorsa, o zaman her iki düzenleri kullanılan Veli görünümler için LayoutParams döküm çalışacağım.

Çözüm: Dont farklı düzenler :) aynı id kullanarak

İlgili konular