将 Picasso 库与 ListView 一起使用

2023-12-23

我想做的是调整我的自定义 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;
    }
}

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);

列表项.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, or int, but a Stringurl 可能就是你想要的。

2)修改你的Adapter's 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;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Picasso 库与 ListView 一起使用 的相关文章

  • Twitter 登录说明

    我想在 Android 中创建一个 Twitter 应用程序 为此 我想创建一个登录页面并登录到 Twitter 为此 我们需要消费者密钥和消费者密钥 这是什么意思 要创建此登录页面 除了 Twitter 帐户之外 我们还需要其他任何东西吗
  • Android:使用 OAuth 访问 google 任务时出现问题

    由于 google 任务没有公共 api 我想编写解决方法并像浏览器一样请求数据 然后解析结果以进一步显示 为了访问数据 我使用 google 实现了 OAuth 身份验证来访问此 url https mail google com htt
  • FTS3 在 ORMLite 中搜索?

    我对 FTS3 一无所知 除了http developer android com guide topics search search dialog html http developer android com guide topics
  • 如何使用Android opencv使图像的白色部分透明

    我无法链接超过 2 个网址 因此我将我的照片发布到此博客 请在这里查看我的问题 http blog naver com mail1001 220650041897 http blog naver com mail1001 220650041
  • 从 Android 代码设置的 SECRET_CODE

    我知道如何使用清单文件中的秘密代码 它与此源代码配合良好
  • ffmpeg视频已压缩但无法在浏览器中播放

    我已经集成了ffmpeg4android lib 视频压缩工作正常 但视频无法在除 safari 浏览器之外的浏览器中播放 上传到服务器后 我使用了以下命令 ffmpeg y i
  • 播放 SoundCloud 曲目

    我可以在 Android 应用程序中播放 SoundCloud 中的曲目吗 我正在尝试这段代码 但它不起作用 String res https api soundcloud com tracks 84973999 stream client
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • 放置在 NavigationDrawer 顶部的片段

    我正在尝试添加一个PreferenceFragment在我的应用程序中 问题是 它自动放置在我的顶部NavigationDrawer public class SetPreferenceActivity extends Activity O
  • Android Studio:未找到 Gradle DSL 方法:“classpath()”

    首先 我已阅读所有其他解决方案帖子以及有关迁移到 1 0 的官方文档 到目前为止 还没有任何效果 Error Error 23 0 Gradle DSL method not found classpath Possible causes
  • 菜单在片段的 onCreateOptionsMenu 处多次膨胀调用

    我使用 Fragments 当我切换到嵌套 Fragment 时 它实现了public void onCreateOptionsMenu Menu menu MenuInflater inflater 当我到达该嵌套片段时 我的菜单会多次膨
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • 在 React Native 中调试应用程序崩溃

    我是 React Native 新手 我正在尝试安装 React Native Facebook SDK 以便我可以使用我的应用程序进行 Facebook 登录 我按照此处列出的步骤操作 https tylermcginnis com in
  • 有关 ListView 自定义行布局项目上的 onClick() 事件的帮助

    我有一个 ListView 其行由我格式化 每行都有 ImageView 和 TextView 的混合 我还实现了自己的适配器 并且能够通过它绘制每一行 现在 我想要这样的东西 用户单击 ImageView 不是行上的其他任何位置 但只有此
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • Android studio - 如何查找哪个库正在使用危险权限?

    我正在尝试将 apk 上传到 google play 商店 但令我惊讶的是 我正在使用以下权限 Your APK is using permissions that require a privacy policy android perm
  • 如何在基本活动中使用 ViewBinding 的抽象?

    我正在创建一个基类 以便子级的所有绑定都将设置在基类中 我已经做到了这一点 abstract class BaseActivity2 b AppCompatActivity private var viewBinding B null pr
  • 使用单选按钮更改背景颜色 Android

    我试图通过从单选组中选择单选按钮来更改应用程序选项卡的背景 但是我不确定如何执行此操作 到目前为止我已经 收藏夹 java import android app Activity import android os Bundle publi
  • Android 中带有组的列表视图

    我有一个列表视图 每行都有一些日期和文本 我可以像 iPhone 中那样将这个 listView 分组 组之间有标题吗 在 android 中是否可能 请帮忙 即 我需要在 Listview 行之间有标题栏 以便如果我使用日期对其进行分组

随机推荐

  • SQL Server:是否可以在不设置链接服务器的情况下从另一个SQL服务器获取数据?

    我需要执行以下查询 例如 SELECT c1 CustomerName FROM Customer as c1 INNER JOIN ExternalServer Database dbo Customer as c2 ON c2 RefI
  • 在同一 git 目录结构中管理代码和文档

    我将一个项目从 Google Code 转移到了 Github 该项目在一个目录结构中包含代码和文档 我想使用Github的 Pages 功能来托管html文档 理想情况下 我想做 1push提交对代码和文档的更改 我怎样才能实现这个目标
  • 我可以为数据库实例使用多个 C3P0 数据源吗?

    我想知道是否可以为一个数据库运行多个 c3p0 数据源 例如
  • 调整 rmarkdown 中的弹性位置

    我正在使用 Flextable 在 rmarkdown 中创建的 Word 文档中制作漂亮的表格 这些表格都在文档的中心对齐 我希望它们在左侧对齐 我知道 body add flextable 有一个对齐参数 但该函数似乎用于将弹性表插入现
  • Pandas:当列相等时获取不同行的平均值

    我试图找到不同行中值的平均值 并按其他列中的相似性进行分组 例子 In 14 pd DataFrame col1 1 2 1 2 col2 A C A B col3 1 5 6 9 Out 14 col1 col2 col3 0 1 A 1
  • 当方法为 TaskCompletionSource 变量返回 .Task 时,这意味着什么?

    特别适用于 return tcsInitialize Task 在这堂课上 internal class TextToSpeechImplementation AndroidTextToSpeech tts TaskCompletionSo
  • 跨多个项目/微服务的 Django 模型。如何?

    我想知道如何解决多个 独立的 django 项目 微服务之间的模型结构共享 例如 项目 API 项目 用户仪表板 项目 管理仪表板 项目 统计 每个项目都使用相同的 django 模型 有没有一种正确的方法来解决这个问题 Django 的基
  • 我们可以将“phonegap api”应用程序与纯本机应用程序(obj-C)代码连接起来吗

    我正在做一个项目 第一页应该是 phonegap api html 页面 当点击特定的链接 r 按钮时 它应该被带到本机应用程序 纯 objC 纯本机应用程序 带有视图控制器 表视图等 我们可以将html页面与纯原生代码连接起来吗 如果是
  • 当一段时间过去或浏览器关闭时,cookie 会过期吗?

    我知道我可以设置 cookie 的过期日期 但是我可以让 cookie 在一段时间后或浏览器关闭时过期吗 如果您设置到期日期 则无论浏览器打开还是关闭 它们都会在该日期到期 一旦浏览器关闭 只有非持久性 cookie 才会过期 See co
  • 使用序数值时 php strtotime 函数出现问题

    在 strtotime 中使用序数值时 有时会得到意想不到的结果 例如 为什么 date M j strtotime second Tuesday February 2011 结果是 Feb 15 实际上是third2011 年的星期二 你
  • 如何根据 TCL 数组的键值对其进行排序?

    The INITIAL ARRAY is Key gt Value B 8 C 10 A 5 E 3 D 1 为了获得基于键的排序数组 我使用 set sorted keys array lsort array names INITIAL
  • 如何迭代 C++ 类的变量成员

    我目前正在尝试对我正在读入的一些数据的一堆变量 基于不同相空间中的标准化 进行复杂的变量校正 由于每次校正都遵循相同的过程 我想知道是否会有无论如何 要迭代地执行此操作 而不是单独处理每个变量 因为我需要对大约 18 20 个变量执行此操作
  • 调用函数的宏

    我需要一个宏 或一个函数 但最好是一个宏 它接受函数名称和无限数量的参数 然后将参数传递给函数 假设这个宏是MACROFOO define MACROFOO function what do I put here int foo bar i
  • 剥离列或行以形成一维数组

    我想从 2D 数组创建 1D 数组 而无需仅使用 1 行代码进行循环 例如 newvec oldvec 3 在 MATLAB 中 它将从 oldvec 的第三列创建一个一维数组 newvec 我的搜索告诉我 在 VBA 中执行此操作的唯一方
  • dbo.aspnet_Users 和 dbo.aspnetUsers 之间有什么区别?

    VS 2013 框架 4 5 1 我运行 Aspnet regsql exe 来创建架构 它创建的表中带有下划线 例如 aspnet Users 它还创建了关联的存储过程 这些存储过程确实有效 并且它们将记录添加到表中 例如 将用户添加到
  • RavenDb:更新非规范化参考属性值

    我已经实现了RavenDB非规范化参考 http ravendb net docs faq denormalized updates图案 我正在努力将静态索引和补丁更新请求连接在一起 以确保在引用的实例值更改时更新我的 非规范化引用属性值
  • 什么是内存碎片?

    我听说过在 C 动态内存分配上下文中多次使用过 内存碎片 这个术语 我发现了一些关于如何处理内存碎片的问题 但找不到处理它本身的直接问题 所以 什么是内存碎片 如何判断内存碎片是否是我的应用程序的问题 什么样的程序最有可能受到影响 处理内存
  • DomPDF 不能很好地渲染表格

    我正在尝试使用 DomPDF 获取 PDF 但遇到了一个奇怪的问题 所有数据和其他内容都很好 但当以 PDF 形式呈现时 表格的第一行总是过时 首先 我虽然表格可能会转到下一页 这会导致样式脱离上下文 但我尝试将表格限制为一页 发现问题仍然
  • 什么是好的 php 解析器生成器?

    我需要解析一种小的 迷你语言 用户可以在我的网站上输入它 我想知道 lex 和 jacc 或 antlr 在 php 世界中的对应部分是什么 I used PHP 的 LIME 解析器生成器 http sourceforge net pro
  • 将 Picasso 库与 ListView 一起使用

    我想做的是调整我的自定义 ListView 适配器以使用 Picasso 库从网络获取的图像 我相信我已经更改了适配器以便接受来自 Picasso 的图像 但我不确定如何更改我的实现以使用 ListView 接受它 我相信我必须访问hold