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> 

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; } 
  • Java.lang.NullPointerException: Intenta invocar el método virtual 'int android.view.View.getImportantForAccessibility ()' en una referencia de objeto nulo
  • Cómo utilizar Universal Image Loader
  • Reemplazando Adapter.getView
  • Recuperación lenta de datos con android y parse.com
  • ¿Cómo resaltar el elemento ListView en el tacto?
  • Eficiencia de diseño de Android, varias vistas o solo con vistas ocultas?
  • Vista de lista expandida necesaria para expandir la fila una a la vez
  • Cómo configurar la posición de desplazamiento de ListView a la parte inferior de android?
  • Lista de contactos con contacto La foto crea problemas de rendimiento
  • Cómo cambiar el color de fondo de los elementos seleccionados en ListView?
  • Cómo establecer ListView no se puede hacer clic
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.