Uso de la biblioteca Picasso con ListView

Lo que estoy tratando de hacer es adaptar mi adaptador ListView personalizado para utilizar las imágenes obtenidas de la web por la biblioteca de Picasso. Creo que he cambiado mi adaptador para aceptar una imagen de Picasso, pero no estoy seguro de cómo cambiar mi implementación para aceptarlo usando un ListView. Creo que tengo que tener acceso a holder.imageIcon, pero no estoy seguro de cómo hacerlo funcionar. Mi código es el siguiente.

Historia.java

public class History { public String score; public String gametype; public Picasso icon; public History() { super(); } public History(String score, String gametype, Picasso icon) { super(); this.score = score; this.gametype = gametype; this.icon = icon; } } 

HistoryAdapter.java

 public class HistoryAdapter extends ArrayAdapter<History> { Context context; int layoutResId; History data[] = null; public HistoryAdapter(Context context, int layoutResId, History[] data) { super(context, layoutResId, data); this.layoutResId = layoutResId; this.context = context; this.data = data; } @Override public View getView(int position, View convertView, ViewGroup parent) { HistoryHolder holder = null; if(convertView == null) { LayoutInflater inflater = ((Activity)context).getLayoutInflater(); convertView = inflater.inflate(layoutResId, parent, false); holder = new HistoryHolder(); holder.imageIcon = (ImageView)convertView.findViewById(R.id.icon); holder.textTitle = (TextView)convertView.findViewById(R.id.gameType); holder.textScore = (TextView)convertView.findViewById(R.id.score); convertView.setTag(holder); } else { holder = (HistoryHolder)convertView.getTag(); } History history = data[position]; holder.textScore.setText(history.score); holder.textTitle.setText(history.gametype); holder.imageIcon.setImageResource(history.icon); return convertView; } static class HistoryHolder { ImageView imageIcon; TextView textTitle; TextView textScore; } } 

Implementación

 History[] historyData = new History[games.length()]; for(int i = 0; i < games.length(); i++) { JSONObject c = games.getJSONObject(i); JSONObject gameStats = games.getJSONObject(i).getJSONObject(TAG_STATS); type[i] = c.getString(TAG_TYPE); champId[i] = c.getString("championId"); cs[i] = gameStats.getString("minionsKilled"); kills[i] = gameStats.getString("championsKilled"); deaths[i] = gameStats.getString("numDeaths"); assists[i] = gameStats.getString("assists"); win[i] = gameStats.getString("win"); if(win[i].equals("true")) win[i] = "Victory"; else win[i] = "Defeat"; if(type[i].equals("RANKED_SOLO_5x5")) type[i] = "Ranked (Solo)"; if(type[i].equals("CAP_5x5")) type[i] = "TeamBuilder"; if(type[i].equals("NORMAL")) type[i] = "Unranked"; score[i] = kills[i] +"/" + deaths[i] + "/" + assists[i]; historyData[i] = new History(score[i], champId[i], R.drawable.ic_launcher); // Placeholder image } if(historyData == null) { historyData[0] = new History("No game found", "N/A", R.drawable.ic_launcher); // Use Picasso placeholder Log.i("Data", "" + historyData); } adapter = new HistoryAdapter(MatchHistoryActivity.this, R.layout.list_adapter, historyData); list.setAdapter(adapter); 

List_item.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:background="#111111" android:padding="6dip" > <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentBottom="true" android:layout_alignParentTop="true" android:layout_marginRight="6dip" android:contentDescription="TODO" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/score" android:textColor="#C49246" android:layout_width="fill_parent" android:layout_height="26dip" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginLeft="5dp" android:layout_toRightOf="@id/icon" android:ellipsize="marquee" android:singleLine="true" android:text="0/0/0 KDA" android:textSize="12sp" /> <TextView android:id="@+id/gameType" android:textColor="#C49246" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_above="@id/score" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_alignWithParentIfMissing="true" android:layout_marginLeft="5dp" android:layout_toRightOf="@id/icon" android:gravity="center_vertical" android:textSize="16sp" /> </RelativeLayout> 

Hay 2 cosas que usted necesita cambiar: 1) History.icon debe ser el URL de la String del icono, no un objeto de Picasso . También puede utilizar un File , Uri o int , pero un url String es probablemente lo que desea.

2) Modifique el método getView() su Adapter's para cargar el icono usando Picasso (vea la última línea antes de getView() devuelve el convertView ):

 public class HistoryAdapter extends ArrayAdapter<History> { Context context; int layoutResId; History data[] = null; public HistoryAdapter(Context context, int layoutResId, History[] data) { super(context, layoutResId, data); this.layoutResId = layoutResId; this.context = context; this.data = data; } @Override public View getView(int position, View convertView, ViewGroup parent) { HistoryHolder holder = null; if(convertView == null) { LayoutInflater inflater = ((Activity)context).getLayoutInflater(); convertView = inflater.inflate(layoutResId, parent, false); holder = new HistoryHolder(); holder.imageIcon = (ImageView)convertView.findViewById(R.id.icon); holder.textTitle = (TextView)convertView.findViewById(R.id.gameType); holder.textScore = (TextView)convertView.findViewById(R.id.score); convertView.setTag(holder); } else { holder = (HistoryHolder)convertView.getTag(); } History history = data[position]; holder.textScore.setText(history.score); holder.textTitle.setText(history.gametype); Picasso.with(this.context).load(history.icon).into(holder.imageIcon) return convertView; } static class HistoryHolder { ImageView imageIcon; TextView textTitle; TextView textScore; } } 
  • La biblioteca de Picasso dejó de funcionar hoy con los acoplamientos del cuadro del gráfico del facebook
  • Picasso no puede cargar imagen dentro del método onSuccess de StorageReference
  • Clear Disk / SD Card Cache de la Biblioteca de imágenes de Picasso de Android
  • Android Picasso - Cómo obtener estadísticas sobre accesos y descargas de caché
  • ¿Cómo tratar con Picasso OutOfMemoryError?
  • Picasso: fuera de la memoria
  • HorizontalGridView / RecyclerLa posición de desplazamiento se restablece una vez que la imagen de Picasso se carga
  • ¿Cómo implementar correctamente el feed (similar a Facebook / Instagram) en Android?
  • Imagen de carga de Picasso en GifImageView (biblioteca android-gif-drawable)
  • ¿Cómo hacer deslizar la pantalla como picasso?
  • ¿Cómo descargar la imagen más rápido en android Volley / Picasso / Glide cualquier otro?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.