我正在尝试做的是调整我的自定义ListView适配器以使用Picasso库从网络获取的图像.我相信我已经更改了适配器以接受来自毕加索的图像,但我不确定如何使用ListView更改我的实现以接受它.我相信我必须访问holder.imageIcon,但我不知道如何让它运行起来.我的代码如下.
@H_301_19@解决方法
History.java
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;
- }
- }
履行
- 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>
您需要更改两件事:
1)History.icon应该是图标的String url,而不是Picasso对象.您也可以使用File,Uri或int,但String url可能就是您想要的.
1)History.icon应该是图标的String url,而不是Picasso对象.您也可以使用File,Uri或int,但String url可能就是您想要的.
2)修改Adapter的getView()方法,使用Picasso加载图标(请参阅getView()返回convertView之前的最后一行):
- public class HistoryAdapter extends ArrayAdapter<History> {
- Context context;
- int layoutResId;
- History data[] = null;
- public HistoryAdapter(Context context,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;
- }
- }