Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Aparece una imagen incorrecta en mis filas ListView

Yo uso este código en mi getView:

@Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.listrow, null); } Order o = items.get(position); if (o != null) { TextView tt = (TextView) v.findViewById(R.id.toptext); ImageView thumb = (ImageView) v.findViewById(R.id.icon); if (o.getOrderDrawable() != null) { thumb.setImageDrawable(o.getOrderDrawable()); } else { tt.setText(o.getOrderTitle()); } } return v; } 

El problema es cuando se desplaza; A veces se muestra la imagen correcta, pero a veces cuando se desplaza hacia atrás / adelante, las imágenes se muestran aleatoriamente y que no está asociado con la fila.

Las imágenes se descargan de la web.

¿Cómo debo solucionar este problema?

3 Solutions collect form web for “Aparece una imagen incorrecta en mis filas ListView”

ListView de Android reutiliza los elementos de la lista cuando ya no son necesarios. Por esta razón, debe asegurarse de que todas las vistas que deben cambiar, en realidad se cambian.

Su problema es que si no encuentra un dibujable para el elemento de lista actual, no vaciará ni ocultará ImageView . Debería hacer thumb.setImageDrawable(null) en ese caso, o thumb.setVisibility(View.GONE) .

Si dejas de usar el convertView obtienes (lo que debes hacer), y generas un nuevo View para volver cada vez, ¿funciona bien? Creo que el problema está en la forma de reutilizar las opiniones.

He intentado usar la solución marcada aquí como correcta, pero no resuelve el problema de la imagen errónea durante el desplazamiento. Intenté el segundo (Zsombor Erdődy-Nagy) y ahora está realmente bien. Así que gracias Zsombor 🙂

Aquí está mi fragmento:

  @Override public View getView(int position, View convertView, ViewGroup parent) { /* View v = convertView; if (v == null) { LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.tweet_list, null); } */ LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = vi.inflate(R.layout.tweet_list, null); final Status status = getItem(position); if (status != null) { TextView statusName = (TextView) v.findViewById(R.id.statusName); TextView statusText = (TextView) v.findViewById(R.id.statusText); TextView statusWhen = (TextView) v.findViewById(R.id.statusWhen); TextView statusScreenName = (TextView) v.findViewById(R.id.statusScreenName); final ImageView statusUserImage = (ImageView) v.findViewById(R.id.statusUserImage); statusName.setText(status.getUser().getName()); statusScreenName.setText("@" + status.getUser().getScreenName()); statusText.setText(status.getText()); statusWhen.setText(dateTimeFormatter.format(status.getCreatedAt())); URL url = status.getUser().getProfileImageURL(); String imageCacheKey = url.getPath(); Drawable cachedImage = imageCache.get(imageCacheKey); if (null != cachedImage) { statusUserImage.setImageDrawable(cachedImage); } else { new DownloadImageTask(statusUserImage, imageCacheKey).execute(url); } } return v; } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.