ClassCastException LinearLayout LayoutParams
Tengo una barra de acción y algunos fragmentos. El problema es mi pantalla de inicio. Hay un Fragmento de la visión en el lado izquierdo y un Fragmento del detalle en el lado derecho. Mi TabListener es dinámico, así que quiero establecer el peso de mi diseño mediante programación. Cada vez que intento obtener los Layoutparams de mi LinearLayout obtengo una ClassCastException:
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)
El diseño que se infla:
- ¿Cómo puedo alinear un elemento a la derecha en FrameLayout?
- ¿Qué es MergeRootFrame en FrameLayout?
- FrameLayout a RelativeLayout ClassCastException incluso si no hay FrameLayout usado
- GetHeight devuelve 0 para todos los objetos de IU de Android
- Clase emitida excepción en FrameLayout cuando estoy tratando de cambiar el orden de las vistas en el diseño xml?
<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>
El código:
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(); }
- Cómo usar el arrastrar correctamente de una vista en android
- Cómo crear una imageView con parámetros id y src?
- Panel corredero deslizante - panel deslizante de línea fina bajo google mapfragment
- Android Fragment no respeta a match_parent como altura
- Android: Establecer márgenes en un FrameLayout mediante programación, no funciona
- Android YouTubePlayer con superposición no autorizada encima del reproductor
- Convierta el diseño del marco en imagen y guárdelo
- Cómo deshabilitar detrás de ver haga clic en evento Framelayout
Lo que sucede es que los LayoutParams de una vista son realmente el tipo del padre . En este caso, obtendrá un FrameLayout$LayoutParams
porque su LinearLayout está dentro de un FrameLayout.
¿Por qué es el tipo de los padres? Eso es porque almacenan información que es útil para que los padres los pongan. Si usted recuperara los parámetros de diseño para el EditText o ListView obtendría LinearLayout$LayoutParams
.
Excepción indica claramente que está intentando FrameLayout
a LinearLayout
. Esto ocurre en el método onViewCreated()
en el archivo ListSearchFragment.java, línea 184. Así que reemplace esto:
LayoutParams lp = (LayoutParams) myView.getLayoutParams();
con este:
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) myView.getLayoutParams();
Antes de hacer eso, puede LayoutParams
el puntero del ratón en LayoutParams
en su código actual y ver en la burbuja que de hecho es android.widget.RelativeLayout.LayoutParams
tanto, su excepción. Ver:
Hay otra razón (o error) para esta excepción:
Si el ID de la vista también se está utilizando en otro diseño, intentará convertir LayoutParams para las vistas Parent usadas en ambos diseños.
Solución: No utilice la misma identificación en diferentes diseños 🙂