¿Por qué desaparecen los elementos cuando se desplaza el listView?

Mi aplicación utiliza un ListView que muestra diferentes elementos en la celda. Debe tener foto y nombre, pero pasa a tener descripción e iconos.

El problema es: cuando desplazo el ListView y vuelvo a la parte superior, la descripción y los iconos han desaparecido, sólo hay imagen y nombre. Tengo la impresión de que la descripción y los iconos han sido eliminados para tener el mismo tamaño para cada fila.

Utilizo un adaptador de encargo (BaseAdapter) para mi ListView :

 public class MyAdapterPark extends BaseAdapter { private ArrayList<DataPark> datapark; private LayoutInflater myInflater; public MyAdapterPark (Context context, ArrayList<DataPark> _datapark) { this.myInflater = LayoutInflater.from(context); this.datapark = _datapark; } @Override public int getCount() { return this.datapark.size(); } @Override public Object getItem(int arg0) { return this.datapark.get(arg0); } @Override public long getItemId(int position) { return position; } public static class ViewHolder { ImageView image; TextView text01; ImageView facebook; ImageView twitter; ImageView linkedin; ImageView blog; ImageView music; TextView bio; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView == null) { convertView = myInflater.inflate(R.layout.affichageitem, null); holder = new ViewHolder(); holder.image = (ImageView)convertView.findViewById(R.id.img); holder.text01 = (TextView)convertView.findViewById(R.id.user); holder.facebook = (ImageView)convertView.findViewById(R.id.facebook); holder.twitter = (ImageView)convertView.findViewById(R.id.twitter); holder.linkedin = (ImageView)convertView.findViewById(R.id.linkedin); holder.blog = (ImageView)convertView.findViewById(R.id.blog); holder.music = (ImageView)convertView.findViewById(R.id.music); holder.bio = (TextView)convertView.findViewById(R.id.bio); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.text01.setText(datapark.get(position).nickname); if (!(datapark.get(position).pic.equals(""))){ try { //byte[] decodedString; //decodedString = Base64.decode(datapark.get(position).pic); //Bitmap bitmap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); //holder.image.setImageBitmap(bitmap); holder.image.setImageBitmap(telechargerImage(datapark.get(position).pic)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ holder.image.setImageResource(R.drawable.profilbase); } if (!(datapark.get(position).facebook.equals(""))){ holder.facebook.setImageResource(R.drawable.fb); }else{ ((ImageView)convertView.findViewById(R.id.facebook)).setVisibility(View.GONE); } if (!(datapark.get(position).twitter.equals(""))){ holder.twitter.setImageResource(R.drawable.twitter); }else{ ((ImageView)convertView.findViewById(R.id.twitter)).setVisibility(View.GONE); } if (!(datapark.get(position).linkedin.equals(""))){ holder.linkedin.setImageResource(R.drawable.linkedin); }else{ ((ImageView)convertView.findViewById(R.id.linkedin)).setVisibility(View.GONE); } if (! (datapark.get(position).blog.equals(""))){ holder.blog.setImageResource(R.drawable.blog); }else{ ((ImageView)convertView.findViewById(R.id.blog)).setVisibility(View.GONE); } if (!(datapark.get(position).music.equals(""))){ holder.music.setImageResource(R.drawable.music); }else{ ((ImageView)convertView.findViewById(R.id.music)).setVisibility(View.GONE); } if (!(datapark.get(position).bio.equals(""))){ holder.bio.setText(datapark.get(position).bio); }else{ ((TextView)convertView.findViewById(R.id.bio)).setVisibility(View.GONE); } return convertView; } public static Bitmap telechargerImage(String url) { Bitmap bm = null; try { URL aURL = new URL(url); URLConnection conn = aURL.openConnection(); conn.connect(); InputStream is = conn.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); bm = BitmapFactory.decodeStream(bis); bis.close(); is.close(); } catch (IOException e) { Log.e("Erreur","Erreur lors de la récupération de l'image : " + e.getMessage().toString()); } return bm; } } 

Y el XML de mi adaptador:

  <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#eaf4f0" > <ImageView android:id="@+id/img" android:layout_width="70px" android:layout_height="70px" android:background="@drawable/carre" android:scaleType="fitXY" android:padding="5sp" android:layout_marginLeft="0sp" android:src="@drawable/profilbase" android:layout_margin="5sp" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:paddingLeft="0sp" android:layout_weight="1" > <TextView android:id="@+id/user" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="14px" android:textColor="#000000" android:textStyle="bold" android:text="" android:layout_marginTop="5sp" /> <TextView android:id="@+id/bio" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="14px" android:textColor="#000000" android:layout_marginTop="1sp" android:layout_marginRight="2sp" android:text="" /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="4sp" android:layout_marginBottom="4sp" > <ImageView android:id="@+id/facebook" android:layout_width="17px" android:layout_height="17px" android:scaleType="fitXY" android:layout_gravity="center" /> <ImageView android:id="@+id/twitter" android:layout_width="17px" android:layout_height="17px" android:scaleType="fitXY" android:layout_gravity="center" android:layout_marginLeft="5sp" /> <ImageView android:id="@+id/linkedin" android:layout_width="17px" android:layout_height="17px" android:scaleType="fitXY" android:layout_gravity="center" android:layout_marginLeft="5sp" /> <ImageView android:id="@+id/blog" android:layout_width="17px" android:layout_height="17px" android:scaleType="fitXY" android:layout_gravity="center" android:layout_marginLeft="5sp" /> <ImageView android:id="@+id/music" android:layout_width="17px" android:layout_height="17px" android:scaleType="fitXY" android:layout_gravity="center" android:layout_marginLeft="5sp" /> </LinearLayout> </LinearLayout> </LinearLayout> 

¡Gracias!

Es porque estás ocultando algunas de tus opiniones a veces, y nunca las vuelves a mostrar. Ejemplo:

  if (!(datapark.get(position).bio.equals(""))){ holder.bio.setText(datapark.get(position).bio); }else{ ((TextView)convertView.findViewById(R.id.bio)).setVisibility(View.GONE); } 

En lugar probar:

  if (!(datapark.get(position).bio.equals(""))){ holder.bio.setVisibility(View.VISIBLE); holder.bio.setText(datapark.get(position).bio); }else{ holder.bio.setVisibility(View.GONE); } 

Recuerde que las vistas se reciclan, así que, a menos que muestre las vistas la próxima vez que regrese una, nunca volverán a ser visibles. Además, recuerde que holder.bio es lo mismo que devuelve findViewById, por lo que puede hacer holder.bio.setVisibility(View.GONE) en el bloque else.

Yo tuve el mismo problema.

  if (!imageuri.isEmpty()) { rl.setVisibility(View.VISIBLE); SmartImageView imageView = (SmartImageView) view.findViewById(R.id.detailimageView1); imageView.setImageUrl(imageuri); } else { rl.setVisibility(View.GONE); } 

Gracias por la solución!

  • Configuración del color del texto del botón con un estilo
  • Android: Personajes dejados atrás en EditText
  • Marco XML simple en android, atributo de clase
  • Crear Circular y Transparente Drawable XML Android
  • Traducir fácilmente xml en Android
  • Cargar un TextView desde xml en un TextSwitcher
  • KitKat specific- android.content.res.Resources $ NotFoundException: Archivo res / drawable / list_selector_white.xml de ID de recurso extraíble
  • Adaptación de adaptadores desde la vista de lista a la clase de vista de elemento único
  • Comentarios en Android Layout xml
  • Establecer switchStyle - obtener error recurso no encontrado - ¿por qué?
  • Alinea el texto dentro de un botón en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.