Использование библиотеки Picasso с ListView

То, что я пытаюсь сделать, – это адаптировать собственный пользовательский адаптер ListView для использования изображений, извлеченных из Интернета библиотекой Picasso. Я считаю, что у меня изменен адаптер, чтобы принять образ из Picasso, но я не уверен, как изменить свою реализацию, чтобы принять его с помощью ListView. Я считаю, что мне нужно открыть файл holder.imageIcon, но я не уверен, как его запустить и запустить. Мой код выглядит следующим образом.

History.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 { 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; } } 

Реализация

 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

      

Вам нужно изменить 2 вещи: 1) History.icon должен быть String URL-адресом значка, а не объектом Picasso . Вы также можете использовать File , Uri или int , но URL-адрес String – это то, что вы хотите.

2) Измените метод getView() Adapter's для загрузки значка с помощью Picasso (см. Последнюю строку перед getView() как getView() возвращает convertView ):

 public class HistoryAdapter extends ArrayAdapter { 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; } } 
  • Используйте Picasso для получения обратного вызова с помощью Bitmap
  • Давайте будем гением компьютера.