¿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.
- BackgroundTint de Lollipop no tiene efecto en un botón
- Centrar un TextView en un TableRow en un TableLayout
- Deshabilitar elementos de vista de lista con selector y isEnabled ()
- Abrir archivo XML desde res / xml en Android
- Agregar nuevo botón a la barra de acción
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!
- Android: Alineación de cuatro cuadrados
- Advertencia: Este <FrameLayout> se puede reemplazar con una etiqueta <merge>
- Android maps: No se pudo encontrar el estilo 'mapViewStyle' en el tema actual
- Android onClick en XML vs. OnClickListener
- Biblioteca Java para consumir / manipular Sharepoint 2013 Resto OData Resultado XML
- No se puede iniciar la actividad ComponentInfo {com.example.countryselect / com.example.countryselect.OfferSelect}
- Forma de analizar XML (org.w3c.Document) en Android
- La vista de desplazamiento de Android es demasiado larga
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!
- Juego de Android lista de cajones de navegación para abrir la mitad exacta de la pantalla para todas las pantallas del dispositivo
- ¿Dónde se desplaza Android View.scrollTo (x, y)?