Android + ListView背景在滚动时设置背景?

2024-03-30

我有一个通过 ArrayAdapter 填充的 ListView。在适配器中,我根据条件设置视图背景颜色。它有效,但是在滚动时其余行采用这种颜色。这是一些代码:

class DateAdapter extends ArrayAdapter<DateVO> {
    private ArrayList<DateVO> items;
    public ViewGroup listViewItem;

    //constructor
    public DateAdapter(Context context, int textViewResourceId, ArrayList<DateVO> items) {
        super(context, textViewResourceId, items);
        this.items = items;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        try {
            if (view == null) {
                LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = vi.inflate(R.layout.row, null);
            }

            final DateVO dateItem = items.get(position);

            if (dateItem != null) {

                //is this my issue here? does position change while scrolling?
                if(items.get(position).getField().equals("home")){
                    view.setBackgroundResource(R.drawable.list_bg_home);
                }
                ...
            }

        }catch (Exception e) {
            Log.i(ArrayAdapter.class.toString(), e.getMessage());
        }

        return view;
    }
} 

这是 ListView 的默认行为。可以通过将cacheColorHint 设置为透明来覆盖它。 只需添加,

android:cacheColorHint="#00000000"

在你的 xml 文件中。

欲了解更多详情,您可以浏览列表视图背景 http://developer.android.com/resources/articles/listview-backgrounds.html文章。 以下是摘录:

要解决此问题,您所要做的就是禁用缓存颜色提示优化(如果您使用非纯色背景),或者将提示设置为适当的纯色值。您可以从代码中执行此操作(请参阅 setCacheColorHint(int)),或者最好使用 android:cacheColorHint 属性从 XML 中执行此操作。要禁用优化,只需使用透明颜色#00000000。以下屏幕截图显示了在 XML 布局文件中设置 android:cacheColorHint="#00000000" 的列表

编辑:作为convertView传递的视图本质上是一个视图,它是列表视图的一部分,但不再可见(由于滚动)。所以它实际上是您创建的视图,并且可能是您设置了自定义背景的视图。要解决此问题,只需确保在不满足条件时重置背景即可。像这样的东西:

if(condition_satisfied) {
    //set custom background for view
}
else {
    //set default background for view
    convertView.setBackgroundResource(android.R.drawable.list_selector_background);
}

基本上,如果您的条件不满足,您将不得不undo当您的条件满足时,您正在执行任何自定义操作,因为您可能收到了旧的自定义视图convertView。 那应该可以解决你的问题。

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

Android + ListView背景在滚动时设置背景? 的相关文章

随机推荐

  • Oracle - 将多个计数作为一个查询返回

    我有几个疑问 详情如下 我希望能够运行一个返回两个计数的 SQL 查询 这可能吗 1 select nvl count rowid 0 from tablename where OPP FOO and date BAZ 2 select n
  • 如何比较 MongoDB 中的两个对象(忽略键的顺序)?

    查找 objA 与 objB 相同的所有文档的最佳方法是什么 键的顺序并不重要 灵感来自另一个问题 https stackoverflow com questions 74962485 how to use lookup on two co
  • 针对 .NET 框架的多个版本的最佳方法是什么?

    我正在构建一个类库 并将其部署为 NuGet 包 这使我可以根据所添加项目的 NET Framework 版本选择要添加为引用的不同程序集 这是一个非常好的功能 但我想知道是否可以拥有一个类库项目 并针对多个版本的 NET 框架构建它 我宁
  • Python 电子邮件正文为空

    我来这里是想请你帮忙 问题是 我的电子邮件主题没问题 但当我打开电子邮件时 它是空的 我真的不明白为什么 这是我的代码 from urllib2 import urlopen import smtplib s smtplib SMTP sm
  • 禁用 JavaScript 时 SSR 不起作用

    在这里参考这张票 https github com zeit next js issues 4210 https github com zeit next js issues 4210我目前想知道为什么当您禁用 javascript 时 使
  • 有 C++ 的样式检查器吗?

    我已经使用java有一段时间了 我发现格子风格 http checkstyle sourceforge net 非常有用 我开始使用 c 我想知道是否有具有类似功能的样式检查器 我主要寻找编写定制支票的能力 关于什么Vera http ww
  • cartopy中shapefile的匹配投影

    我正在尝试使用 matplotlib 和 cartopy 制作 Choropleth 地图 显然我需要首先绘制 shapefile 然而 尽管有人提出了类似的问题 但我没能做到这一点here https stackoverflow com
  • 反引号无法在 shell 脚本中运行 mysql 查询

    您好 我正在尝试从 shell 脚本运行 MySQL 查询 mysql u root p 1234 e CREATE TABLE DB aa vv cc id int 10 unsigned NOT NULL AUTO INCREMENT
  • Json压缩传输

    我想知道基于 javascript 的 json 压缩的当前状态是什么 当前是否有任何库允许通过用单个字符替换长名称或其他方法来压缩 json 有人有用 Javascript 实现 HPPack https github com WebRe
  • Files.newDirectoryStream 与 Files.list

    我知道文件 列表 路径 http docs oracle com javase 8 docs api java nio file Files html list java nio file Path uses 文件 newDirectory
  • 使用适用于 Android 的 XSL-FO 生成 PDF

    是否可以使用 XSL FO 在 Android 应用程序中生成 PDF 下载 Apache FOP 并查看 Android 运行时中是否包含所需的依赖项 可能会比较慢 您可以使用 iText 或 PDFBox 来呈现 PDF 或者使用服务器
  • Cloudwatch Insights 在多行日志中搜索

    日志示例 REQUEST ID 123 Video id 444 REQUEST ID 123 Request error REQUEST ID 534 Video id 555 REQUEST ID 534 Request ok 问题 如
  • tensorflow2.1 InvalidArgumentError:断言失败:[0] [Op:Assert]名称:EagerVariableNameReuse

    我训练了自定义模型并使用了 TensorFlow 2 1 当我运行代码时 我收到以下错误 InvalidArgumentError 断言失败 0 Op Assert 名称 EagerVariableNameReuse 这是显示错误的行 se
  • HammerJS 滑动与 Mat-Tabs 阻止垂直滚动

    所以我的 Angular 应用程序中有一个组件 其中包含数据类别的选项卡以及选项卡内容的值数组 我想使用 HammerJS 在选项卡之间滑动以获得更原生的体验 我还安装了这个虚拟滚动包 https github com rintoj ang
  • 网站管理员 API - 配额限制

    我们正在尝试通过调用使用 Webmasters API NET 客户端库下载网站的页面数据WebmastersService SearchAnalytics Query 为此 我们正在使用Batching https developers
  • 通过匹配其他数组来更改对象属性的位置

    我有一个对象 var data D 1 AA Changes xml This is a string D 2 Compare AA Changes xml This is a string 我需要将该属性与我拥有的另一个数组相匹配 如下所
  • Flutter Video Player On Click 传递 URL 动态并加载视频进行播放

    下面附有视频播放器的示例屏幕 https i stack imgur com PoeyX png如何使视频播放器动态播放 同时通过传递视频 URL 来单击列表播放视频 单击时我已经传递了 URL 并尝试重新初始化并开始播放它不起作用 状态没
  • VHDL - 为什么直接在函数上使用长度属性会产生警告?

    我有一个 VHDL 函数 它返回记录的 std logic vector 表示形式 并且我想要该 std logic vector 的长度 我可以直接在函数上使用长度属性 为什么这会在 ModelSim 中产生警告 我是否会引发一些微妙的问
  • 为什么“www.example.com”与“example.com”不同?

    我有一个网站 如果我登录这种格式的域http example com http example com然后将我的地址更改为http www example com http www example com 我发现我的帐户没有登录 如果我将地
  • Android + ListView背景在滚动时设置背景?

    我有一个通过 ArrayAdapter 填充的 ListView 在适配器中 我根据条件设置视图背景颜色 它有效 但是在滚动时其余行采用这种颜色 这是一些代码 class DateAdapter extends ArrayAdapter