Establecer Parámetros de diseño RelativeLayout mediante programación – lanza ClassCastException

Estoy inflando un RelativeLayout de XML y, a continuación, intentar establecer mediante programación sus parámetros de diseño y estoy recibiendo un ClassCastException.

Código:

profileHeader = (RelativeLayout)mInflater.inflate(R.layout.user_profile_header, null); profileHeader.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT)); 

lanza

 E/AndroidRuntime( 2963): java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams E/AndroidRuntime( 2963): at android.widget.ListView.measureScrapChild(ListView.java:1119) E/AndroidRuntime( 2963): at android.widget.ListView.measureHeightOfChildren(ListView.java:1202) E/AndroidRuntime( 2963): at android.widget.ListView.onMeasure(ListView.java:1111) E/AndroidRuntime( 2963): at android.view.View.measure(View.java:8222) E/AndroidRuntime( 2963): at android.view.ViewGroup.measureChildWithMargins(V 

He visto otras notas en la red para intentar usar LinearLayout.LayoutParams, pero que doesnt parece ayudar.

Si usted se está preguntando por qué estoy haciendo esto en absoluto y no sólo la configuración en el XML es porque estoy viendo algo extraño donde el diseño "salta" a un wrap / wrap. YO SOY fijándolo a fill_parent / fill_parent en el XML y en desplazar la vista "encoge" a lo que parece ser wrap / wrap. Es muy raro. Mirando el código fuente androide foursquared encontré un comentario donde el desarrollador dice lo mismo:

"Algo extraño está pasando con los parámetros de diseño, sin embargo, si no definimos explícitamente el diseño para que se rellene / rellene después de inflar, el diseño salta a un diseño envolvente / envolvente". (FriendsActivity.java:258)

Que suena como mi problema, por lo tanto, estoy tratando de hacer lo mismo (establecer el diseño a través de código), pero en su caso él está usando LinearLayout, mientras que estoy usando RelativeLayout.

¿Qué me estoy perdiendo? Gracias por adelantado.

Los params de diseño tienen que ser del tipo de los padres. Así que si está creando un RelativeLayout y agregándolo a un ListView, los parámetros de diseño deben ser del tipo ListView.LayoutParams, no RelativeLayout.LayoutParams. La forma correcta de hacerlo es llamar inflar de esta manera:

infle (R.layout.mylayout, theListView, false);

Esta versión de inflar () inflar correctamente los parámetros de diseño (android: layout_ *) definidos en XML.

Si su vista está en un ListView, debe utilizar AbsListView.LayoutParams .

Vea también: No se puede establecer el margen del elemento en ListView mediante el adaptador personalizado

  • Cómo limitar la altura de la vista desplegable de Spinner en Android
  • Android Listview con diferentes diseños para cada fila?
  • Cómo cambiar ¿Cambiar texto a lado derecho en android?
  • Android: nextFocusForward se ignora en el diseño
  • ¿Cómo configurar varios oyentes de clics en diferentes palabras de textview?
  • Cómo diseñar una ruleta en Android
  • ¿Es posible habilitar la opción de revelador "Mostrar límites de diseño" mediante programación?
  • alinear una imagen en la parte superior de imagenap
  • ¿Es posible realizar la sustitución de cadenas en archivos XML de recursos de Android directamente?
  • Android Tablayout Establecer textAllCaps a False no funciona
  • El retorno de carro de TextView no funciona
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.