Estoy intentando establecer márgenes izquierdos variables para los elementos en mi ListView. El problema se produce en mi adaptador personalizado en el método getView:No se puede establecer el margen del elemento en ListView mediante el adaptador personalizado
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
Comment c = comments.get(position);
convertView = inflater.inflate(R.layout.list_item, null);
(TextView)convertView.findViewById(R.id.story)).setText(c.message);
}
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
lp.setMargins(0, c.getDepth() * 5, 0, 0);
convertView.setLayoutParams(lp);
return convertView;
}
inflamos el diseño list_item que es un RelativeLayout con algunos textViews interior. Luego intento establecer los márgenes usando RelativeLayout.LayoutParams. Recibo una excepción de lanzamiento de clase sobre esto, pero el tipo normal de LayoutParams no tiene ningún método para establecer los márgenes.
¿Cuál es la mejor manera de establecer el margen?
Aquí está el error
java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams
at android.widget.ListView.setupChild(ListView.java:1779)
at android.widget.ListView.makeAndAddView(ListView.java:1748)
at android.widget.ListView.fillDown(ListView.java:670)
at android.widget.ListView.fillFromTop(ListView.java:727)
at android.widget.ListView.layoutChildren(ListView.java:1598)
at android.widget.AbsListView.onLayout(AbsListView.java:1273)
at android.view.View.layout(View.java:7192)
at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
at android.view.View.layout(View.java:7192)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
at android.view.View.layout(View.java:7192)
at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
at android.view.View.layout(View.java:7192)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1145)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1865)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3835)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native Method)
Parece que realmente ocurre después de que devuelvo el converView, aunque está en lo cierto al decir que necesito establecer el margen antes. Agregué el error a mi publicación. –
Hice una aplicación simple para probarla, pero no logré que funcione. Te sugiero que utilices el relleno de View, que creo que tiene el mismo comportamiento. convertView.setPadding (0, c.getDepth() * 5, 0, 0); Perdón por no traer más ayuda:/ – Astrorvald
Desafortunadamente, en realidad, quiero que se cambie toda la vista, y el relleno solo crea un espacio dentro de la vista. ¡Gracias por intentarlo! –