10

액션 바와 일부 프래그먼트가 있습니다. 문제는 내 홈 화면입니다. 왼쪽에는 개요 Fragment가 있고 오른쪽에는 세부 Fragment가 있습니다. 내 레이아웃의 무게를 프로그램 적으로 설정하려면 내 TabListener가 동적입니다.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) 

레이아웃 팽창 :

<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 실제로 부모의 유형이다. 이 경우 LinearLayout이 FrameLayout 내부에 있으므로 FrameLayout$LayoutParams이 표시됩니다.

왜 부모 유형입니까? 그것은 그들이 부모를 배치하는 데 유용한 정보를 저장하기 때문입니다. EditText 또는 ListView에 대한 레이아웃 매개 변수를 검색하려면 LinearLayout$LayoutParams이됩니다. 이 예외에 대한 또 다른 이유 (또는 버그)가

+0

고맙습니다. 지금은 잘 작동합니다. layout_weight 대신 layout_gravity를 사용하고 너비를 동적으로 변경합니다. – Ceryni

+0

Sweet! 이 대답이 도움이된다면, 그것을 받아 들여야합니다 (왼쪽의 체크 표시). – dmon

+0

아, 감사합니다. 내 첫 번째 질문에 stackoverflow – Ceryni

1

예외가 명확하게한다고 난 내있는 LinearLayout의의 LayoutParams를 얻으려고 할 때마다 내가 ClassCastException를 얻을 FrameLayoutLinearLayout (으)로 변환하려고합니다. 이 ListSearchFragment.java 파일에 onViewCreated() 방법에서 발생, 라인 (184)은 그래서 대체 :

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

를이와 함께 : 당신이 그렇게하기 전에

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

, 당신이 LayoutParams에 마우스 포인터를 할 수 있습니다 현재 코드이고 거품으로 보면 사실은 android.widget.RelativeLayout.LayoutParams입니다. 참조 : 무슨 일이야

enter image description here

+0

그건 작동하지 않습니다. 똑같은 예외. 위의 허용 된 대답을 보면 전혀 불가능합니다. 나는 내가 틀렸다는 것을 알게되어 행복 할 것이다. – halxinate

0

:

뷰의 ID가 또 다른 레이아웃에 사용되는 경우는 다음 두 레이아웃에 사용되는 부모 뷰의의 LayoutParams를 캐스팅해야 할 것입니다.

솔루션 : 그나마 다른 레이아웃 :)에 동일한 ID를 사용

관련 문제