gpt4 book ai didi

android - 将 Picasso 库与 ListView 一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:27:44 26 4
gpt4 key购买 nike

我正在尝试做的是调整我的自定义 ListView 适配器以使用 Picasso 库从网络上获取的图像。我相信我更改了我的适配器以接受来自 Picasso 的图像,但我不确定如何更改我的实现以使用 ListView 接受它。我相信我必须访问 holder.imageIcon,但我不确定如何启动和运行它。我的代码如下。

历史.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;
}
}

历史适配器.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 对象。您还可以使用 FileUriint,但您可能需要 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, 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;
}
}

关于android - 将 Picasso 库与 ListView 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23120238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com