studio llenar example custom como arrayadapter agregar activity android android-listview

llenar - listview android example



Android-ClassCastException-en LayoutParams de LinearLayout a AbsListView (6)

Una forma adecuada de trabajar con getView de ArrayAdapter para su código es esta:

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 recolecte basura manualmente en su código si es posible.

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

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 obteniendo 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 el siguiente:

<?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 envuelve el control que está devolviendo desde el adaptador en una distribución lineal. Pierda el LinearLayout de su archivo de diseño (simplemente coloque el TextView como la raíz) y creo que debería funcionar.

Para expandir levemente: estás creando tu control y luego agregándolo a LinearLayout. En este punto, se asigna un objeto LinearLayout $ LayoutParams y se configura como sus parámetros de diseño. A continuación, lo extrae del diseño lineal y lo coloca en su vista de lista, que no comprende LinearLayout $ LayoutParams.

Alternativamente, devuelva 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 entre comillas) devolviendo la televisión.

(Otra sugerencia no relacionada: está inflando su diseño y luego descartándolo cuando convertView! = Null; esto dará como resultado un rendimiento de desplazamiento deficiente en dispositivos lentos. Solo realice la inflación si realmente la va a necesitar).


Probablemente estás devolviendo el televisor en lugar de remar

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!


¿Intentó utilizar 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);


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 usé 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; }