getView 中的自定义 ArrayAdapter setBackground

2023-12-04

我正在开发一个 ListActivity ,它将显示一堆数字(权重)。我想更改 ListView 中特定行的背景。为此,我创建了 ArrayAdapter 类的自定义实现,并重写了 getView 方法。该适配器接受数字列表,并将数字 20 的行的背景设置为黄色(出于简单原因)。

    public class WeightListAdapter extends ArrayAdapter<Integer> {

    private List<Integer> mWeights;

    public WeightListAdapter(Context context, List<Integer> objects) {
        super(context, android.R.layout.simple_list_item_1, objects);

        mWeights = objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = super.getView(position, convertView, parent);

        int itemWeight = mWeights.get(position);
        if (itemWeight == 20) {
            v.setBackgroundColor(Color.YELLOW);
        }
        return v;
    }

}

问题是,不仅数字 20 的行得到黄色背景,而且数字 0 的行(即第一行)也得到黄色背景,我不确定为什么会这样。

我在 getView 方法中做错了什么(比如调用 super 方法)?我的实现理由是:所有返回的视图应该相同(这就是我调用 super 方法的原因),只有符合 if 条件的视图才应该改变。

感谢您的帮助!


我做了一些研究来找出如何正确地完成此操作。

我正在为其他有同样问题的人写下这个,因为我想这是正确的方法。如果我弄错了或者这个解决方案有任何我没有看到的缺陷,请告诉我。

public class WeightListAdapter extends ArrayAdapter<Integer> {

  private static final int TYPE_COUNT = 2;
  private static final int TYPE_ITEM_COLORED = 1;
  private static final int TYPE_ITEM_NORMAL = 0;

  public WeightListAdapter(Context context, List<Integer> objects) {
    super(context, android.R.layout.simple_list_item_1, objects);
  }

  @Override
  public int getViewTypeCount() {
    return TYPE_COUNT;
  }

  @Override
  public int getItemViewType(int position) {
    int item = getItem(position);

    return (item == 30) ? TYPE_ITEM_COLORED : TYPE_ITEM_NORMAL;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    View v = super.getView(position, convertView, parent);
    switch (getItemViewType(position)) {
    case TYPE_ITEM_COLORED:
      v.setBackgroundColor(Color.YELLOW);
      break;
    case TYPE_ITEM_NORMAL:
      break;
    }

    return v;

  }
}

显然基类已经实现了确保正确的逻辑convertView被传递到getView方法(基于getViewItemType and getViewTypeCount方法)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

getView 中的自定义 ArrayAdapter setBackground 的相关文章

随机推荐

  • 视窗。更改下拉菜单位置

    有没有办法改变弹出菜单的位置 对于顶级窗口 我可以通过 CBTProc 回调函数和 MoveWindow 来完成 我可以对菜单做同样的事情吗 需要这样做 以便弹出菜单仅位于其父窗口的区域中 像轻窗口管理器之类的东西 是的 在一个WH CBT
  • 如何观察数组变化并查看添加了哪些新元素?

    onArrayChanged function obj keyName value What is value here exactly property array each 当一个元素被添加到数组中时 我如何知道添加了哪个值 同样 当从
  • 使用自定义 IEqualityComparer 对字典进行 XML 序列化

    我想序列化一个具有自定义的字典IEqualityComparer 我尝试过使用DataContractSerializer但我无法得到Comparer进行序列化 我不能使用BinaryFormatter因为this 我总是可以做这样的事情
  • 线程共享 Perl

    我写了一段代码 我需要使它成为多线程 一切正常 但每个循环重复 4 次 use LWP UserAgent use HTTP Cookies use threads use threads shared 1 threads 4 my gro
  • MSDN 文档错误? “如果该过程是共享的,则其所有局部变量都会自动共享。这包括静态变量。”

    我正在查看有关 VB Net 很少使用的 MSDN 文档Static局部变量的关键字 我的问题是not关于静态的工作原理 我个人计划避免使用它 因为它似乎会给未来没有注意到副作用的程序员带来悲伤 我的问题是关于文档中的这个声明 任何局部变量
  • 将 Bootstrap 类名添加到 Typo3 表

    是否可以将 Bootstrap 表类添加到 Typo3 v6 1 中创建的表中 我在创建 Table 类型的页面时注意到设置 Additional CSS Class 但是 它不会向我的表添加任何类 它不支持添加多个类 逗号 空格等在保存时
  • 如何使用新的 Material Design 图标主题:轮廓、圆形、双色调和锐利?

    谷歌已经对其进行了改造材料设计图标有 4 个新的预设主题 轮廓 圆形 双色调和锐利 除了常规的填充 基线 theme 但不幸的是 它没有说明如何使用新主题 我去过通过 Google Web Fonts 使用它通过包含链接 然后使用所需的图标
  • 关闭 docker-compose 后 Docker 卷不保留数据

    我正在使用 docker compose 组合 2 个图像 tomcat 与我的应用程序和数据库 postgres 我的撰写文件如下所示 version 3 services tomcat build tomcat img ports 80
  • as_bytes 函数的精确定义

    我在阅读时发现了这个函数 但找不到它的定义CPP参考 Bjarne stroustrup 的编程原理 它的使用方式如下 ifs read as bytes x sizeof int 我明白如何read有效 但你仍然可以帮助我to bytes
  • 在 webkit 浏览器中使用 标签时,带有嵌入位图的 SVG 不显示位图

    我正在尝试使用带有嵌入位图的 SVG 作为导航元素 这个想法是让它更加适合移动设备 我已经为 IE8 及更低版本设置了 PNG 后备 不知何故 嵌入的位图不会在基于 webkit 的浏览器中显示 没有嵌入位图的 SVG 显示就可以了 我可以
  • 动态更改 Highstock 中的范围

    我想动态更改图表中的范围 如果我从大值变为小值 一切都会正常 但如果我想再去更大的地方 就什么也不会发生 你可以在这里尝试一下 http jsfiddle net Charissima wkBwW 15 单击按钮 Range 50 然后单击
  • 使用 python 进行敏感性分析

    我正在尝试执行敏感性分析 并且我开始学习 python 所以我想在 python 中完成此任务 我发现了一个名为SALib但我真的不知道如何实现我自己的方程 例如 这是我的等式 ET 0 0031 C R 209 t t 15 1 首先我必
  • 使用 jQuery 从子域获取 JSON

    I have user1 mydomain com and user2 mydomain com域 我用api mydomain com通过 AJAX JSON 处理我的 Web 应用程序 所以 我想发出一个 POST 请求user1 my
  • 拨打号码时启动我的应用程序

    我想在拨打新号码或联系人号码时将我的应用程序显示为一个选项 我已关注这个话题 我有一个具有单一活动的应用程序 这是清单文件
  • 如何在 MySQL 中搜索 Soundex() 子字符串?

    我的 Joomla 有问题 3 集成搜索引擎 该引擎的索引器在索引内容时创建所谓的 soundex values 例如 测试对象 测试对象1 测试对象2239923 文本对象 它们都具有相同的 soundex 值 T23123 现在我的问题
  • 使用 C# 更改文件扩展名

    我有很多文件类型 pdf tiff jpeg bmp ETC 我的问题是如何更改文件扩展名 我试过这个 my file c my documents my images cars a jpg string extension Path Ge
  • PHP 脚本(嵌入式或其他形式)的安全性

    我对嵌入 PHP 代码的 HTML 网页 以 webpage php 形式存在于服务器上的网页 或可能被 HTML 页面引用的 PHP 脚本 即 PHP 脚本实际上不是网页的一部分 以 something php 形式存在于服务器上 并由
  • 使用 crontab 运行 PHP 脚本

    我知道 SO 是针对问题的 但无论我查了多少教程 我都无法得到我的crontab工作 我正在建立一个网站 该网站将依赖于crontab每天晚上重置我的数据库中的特定设置 这是我的crontab file Edit this file to
  • 如何在结构体字段中表示不透明类型

    我正在使用 genawater 箱来实现生成器函数 单线程 多任务 我有这段代码来创建一个新线程 并向其传递一个生成器 但我正在努力 找到如何表示impl Future输入那个gen 返回 use genawaiter rc gen Gen
  • getView 中的自定义 ArrayAdapter setBackground

    我正在开发一个 ListActivity 它将显示一堆数字 权重 我想更改 ListView 中特定行的背景 为此 我创建了 ArrayAdapter 类的自定义实现 并重写了 getView 方法 该适配器接受数字列表 并将数字 20 的