Android – ClassCastException – en LayoutParams de LinearLayout a AbsListView

Tengo un adaptador de lista que estoy tratando de establecer un xml personalizado para (item.xml) si no uso la inflación (identificación directa de la textview a través de un contexto de aplicación), funciona perfectamente .. pero luego mi listview no puede ser temática

public View getView(int position, View convertView, ViewGroup parent) { //System.gc(); TextView tv; LayoutInflater inflater = getLayoutInflater(); View row = View.inflate(mContext,R.layout.item,null); //.inflate(R.layout.item, parent, false); doesnt work either.. String id = null; if (convertView == null) { tv = (TextView) row.findViewById(R.id.TextView01);; } else tv = (TextView) convertView; 

[..]

en logcat estoy recibiendo esto ..

  07-15 19:45:51.710: ERROR/AndroidRuntime(20185): FATAL EXCEPTION: main java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams at android.widget.ListView.setupChild(ListView.java:1827) at android.widget.ListView.makeAndAddView(ListView.java:1794) at android.widget.ListView.fillDown(ListView.java:688) 

mi archivo item.xml es como sigue:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:gravity="left|center" android:layout_width="fill_parent" android:paddingBottom="15px" android:background="#fff200" android:paddingTop="15px" android:paddingLeft="15px"> <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="40px" android:textStyle="bold" android:layout_marginLeft="20px" android:textColor="#0099CC"> </TextView> </LinearLayout> 

6 Solutions collect form web for “Android – ClassCastException – en LayoutParams de LinearLayout a AbsListView”

El problema se debe a que se envuelve el control que está retornando desde el adaptador en un linearlayout. Perder el LinearLayout de su archivo de diseño (sólo poner el TextView como la raíz) y creo que debería funcionar.

Para expandir ligeramente: está creando su control, y luego agregarlo a LinearLayout. En este punto, un objeto LinearLayout $ LayoutParams se asigna para ello y se define como sus parámetros de diseño. A continuación, extraerlo del diseño lineal y ponerlo en su vista de lista, que no entiende el LinearLayout $ LayoutParams.

Alternativamente, devolver la fila de getView en lugar de (como supongo que está haciendo en este momento, ya que ha cortado la línea de retorno de su código citado) devolviendo tv.

(Otra sugerencia no relacionada: se está inflando su diseño y luego se descarta cuando convertView! = Null, lo que resultará en un rendimiento de desplazamiento deficiente en los dispositivos lentos. Sólo realizar la inflación si realmente va a necesitar.

es probable que vuelva la televisión en lugar de fila

 public View getView(int position, View convertView, ViewGroup parent) { TextView tv; LayoutInflater inflater = getLayoutInflater(); View row = View.inflate(mContext,R.layout.item,null); String id = null; if (convertView == null) { tv = (TextView) row.findViewById(R.id.TextView01);; } else tv = (TextView) convertView; } return row; // returning tv brings to ClassCast! 

¿Intentaste usar el inflador de diseño para inflar el diseño xml estático? Me gusta esto:

 LayoutInflater li = LayoutInflater.from(context); View rootView = li.inflate(R.layout.item, null); 

Una manera adecuada de trabajar con el getView de ArrayAdapter para su código es:

 public View getView(int position, View convertView, ViewGroup parent) { //System.gc(); // Should not manually call gc View row; LayoutInflater inflater = getLayoutInflater(); if (convertView == null) { row = inflater.inflate(R.layout.item, parent, false); } else row = convertView; TextView tv = (TextView) row.findViewById(R.id.TextView01); 

Además, no recoja manualmente la basura en su código si es posible.

Este es el correcto:

 public View getView(int position, View convertView, ViewGroup parent) { View vi = convertView; final ViewHolder holder; if(view==null){ vi = inflater.inflate(R.layout.listview_row_myvideos,null); holder = new ViewHolder(); holder.tv = (TextView) vi.findViewById(R.id.TextView01); vi.setTag(holder); }else{ holder = (ViewHolder)vi.getTag(); } return vi; } public class ViewHolder{ TextView tv; } 

Tuve el mismo problema y he utilizado estos códigos:

 public View getView(final int position, View convertView, ViewGroup parent) { convertView = G.layoutInflater.inflate(R.layout.list_lay_cities_markets, null); // your work notifyDataSetChanged(); return convertView; } 
  • Explicación del método getView () de un ArrayAdapter
  • Actualización de textview en la actividad una vez que se cambian los datos en la clase de adaptador
  • ListFragment no acepta mi diseño
  • Fuerza onSizeChanged para ListView
  • Interacción de ExpandableListAdapter.getChildView () con AbsListView.LayoutParams
  • El adaptador getView () pide la posición 0 dos veces antes de cada posición. ¿Por qué?
  • Elemento de fila personalizada de Android para ListView
  • Sólo en algunos teléfonos, ListView no se actualiza después de notifyDataSetChanged ()
  • Resalte el elemento personalizado de lista cuando haga clic largo
  • Adaptador ListView personalizado, comportamiento de ImageView extraño
  • ListView divisores en la parte superior e inferior del elemento ListView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.