Android listview 带有复选框的问题

2024-02-08

我有一个奇怪的问题!我正在尝试创建一个带有复选框的列表视图。在我的另一个thread https://stackoverflow.com/questions/5438375/custom-listview-with-checkbox-problem有人告诉我应该使用一个数组来跟踪检查的行。我这样做了,效果很好,但逻辑是错误的,我现在遇到了另一个问题。

public View getView(final int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.row, null);
        }

        CheckBox checkbox = (CheckBox)v.findViewById(R.id.checkbox);
        checkbox.setChecked(checked[position]);

        final LinearLayout rowLayout = (LinearLayout) v.findViewById(R.id.individualRow);

        checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){

            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked)
                {
                    rowLayout.setBackgroundColor(Color.GRAY);                       
                    checked[position] = false;                      
                }
                else
                {   
                    rowLayout.setBackgroundColor(Color.DKGRAY);
                    checked[position] = true;                       
                }
            }               
        });
   }

最初未选中所有复选框,它工作正常,即使我向下滚动并再次向上滚动,但选中的数组未正确设置,它仍会保持我选择的复选框处于选中状态。基本上 if 测试应该是相反的!

if(isChecked)
{
   rowLayout.setBackgroundColor(Color.GRAY);                        
   checked[position] = true;                        
}
else
{   
   rowLayout.setBackgroundColor(Color.DKGRAY);
   checked[position] = false;                       
}

问题确实出在滚动上,因为每次我滚动时都会调用 onCheckedChanged 方法,并且由于它回收了行,所以它在未选择的新行的位置传递,但因为它具有与先前选择的索引相同的索引它改变了它的价值。例如,如果我选中索引为 2 的框(将其设置为 true),然后向下滚动新行成为索引为 2 的行,则再次调用该方法并取消设置复选框(选中数组中的字段)。

我需要它来“记住”所有选中的框。换句话说,我希望检查的数组能够正确初始化。并且还要记住选中了哪些框,并且每次滚动时都不会丢失它们!

我究竟做错了什么?

你能帮我么?

提前致谢——迈克


这很棘手。

问题是你正在打电话setChecked,激活旧的OnCheckedChangeListener.

修复方法非常简单:调用setOnCheckedChangeListener打电话之前setChecked。这样,您就可以从回收的视图中切断到旧侦听器的链接。

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

Android listview 带有复选框的问题 的相关文章

  • 在包“android”中找不到属性“backgroundTint”的资源标识符

    我发现了一些视图 xml 属性 例如backgroundTint backgroundTintMode 但是当我使用它作为视图属性定义时 Eclipse 显示错误 No resource identifier found for attri
  • Sqlite数据库生命周期?关闭应用程序后它会被删除吗?

    我正在遵循一个简单的教程 该教程创建一个从 SQLiteOpenHelper 扩展的类 并创建一个包含一个表和 5 行的数据库 好的 但我需要更多地了解 android Sqlite 数据库 例如 如果应用程序关闭或手机关机会发生什么 数据
  • android中向sqlite中插入大量数据

    目前 我必须一次向我的 Android 中插入超过 100 亿条数据 然而 内存不足的问题会使程序崩溃 sqlite 插入测试非常简单 只需使用 for 循环生成 sql 插入命令并通过 开始 和 提交 进行包装 private Array
  • 在 Android Studio 中,为什么我必须在模拟器中单击“运行应用程序”两次才能启动应用程序?

    在 Android Studio 中 当我按播放按钮在 Android 模拟器上安装并运行应用程序时 大约 5 10 秒后 我在屏幕底部收到一条消息 显示 安装成功 但应用程序实际上并未运行在模拟器上 我必须再次按下播放按钮 这是非常令人沮
  • Android - 从资产中解析巨大(超大)JSON 文件的最佳方法

    我正在尝试从资产文件夹中解析一些巨大的 JSON 文件 我如何加载并添加到 RecyclerView 我想知道解析这种大文件 大约 6MB 的最佳方法是什么 以及您是否知道可以帮助我处理此文件的良好 API 我建议您使用GSON lib h
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • 找不到 com.google.firebase:firebase-core:9.0.0 [重复]

    这个问题在这里已经有答案了 在遵循有些不一致的指示之后here https firebase google com docs admob android quick start name your project and here http
  • 无法获取log.d或输出Robolectrict + gradle

    有没有人能够将 System out 或 Log d 跟踪从 robolectric 测试输出到 gradle 控制台 我在用Robolectric Gradle 测试插件 https github com robolectric robo
  • 谷歌坐标认证

    当我尝试连接到 Google 坐标时 总是出现异常GoogleAuthException 我拥有 Google 地图协调中心许可证 我确实使用我的包应用程序名称和 SHA1 在 google 控制台中创建了我的客户端 ID 我将权限添加到清
  • 用于列出文件夹但排除特定文件夹的批处理脚本

    我希望此脚本列出文件夹名称中包含 deleted 的所有文件夹 但如果它们位于名为 done 的文件夹中则不列出 例如 列出文件夹 如果位于 C temp如果它在C temp random folder name但如果它在C temp do
  • Android 模拟器插件无法初始化后端 EGL 显示

    我在 Cloudbees 上设置了 Jenkins 作业 并且可以在那里成功签出并编译我的 Android 项目 现在我想在 android 模拟器中运行一些 JUnit 测试并添加 Android 模拟器插件 我将 显示模拟器窗口 选项设
  • Android SIP 来电使用带有广播接收器的服务

    大家好 其实我正在尝试创建一个应用程序 支持基于 SIP 通过互联网进行音频呼叫 这里使用本机 sip 我遇到了来电问题 我已经完成了服务的注册部分 但是在接听电话时我无法接听电话 请帮助我 Service file package exa
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 如何默认在 ActionOpenDocument 意图中显示“内部存储”选项

    我需要用户选择一个自定义文件类型的文件 并将其从 Windows 文件资源管理器拖到 Android 设备上 但默认情况下内部存储选项不可用 当我使用以下命令启动意图时 var libraryIntent new Intent Intent
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 将 Intent 包装在 LabeledIntent 中以用于显示目的

    要求 我的应用程序中有一个 共享 按钮 我需要通过 Facebook 分享 我需要选择是否安装原生 Facebook 应用程序 我们的决定是 如果未安装该应用程序 则将用户发送到 facebook com 进行分享 当前状态 我可以检测何时
  • android sdk 的位置尚未在 Windows 操作系统的首选项中设置

    在 Eclipse 上 我转到 windows gt Android SDK 和 AVD Manager 然后弹出此消息 Android sdk 的位置尚未在首选项中设置 进入首选项 在侧边栏找到 Android 然后会出现一个 SDK 位

随机推荐

  • 在 Delphi 中如何位反映一个字节?

    在Delphi中是否有一种简单的方法来位反映字节变量 以便最高有效位 MSB 获得最低有效位 LSB 反之亦然 在代码中你可以这样做 function ReverseBits b Byte Byte var i Integer begin
  • 具有派生接口的 C# 接口实现

    在下面的示例中 类 SomeClass 没有实现 ISomeInterface 为什么我不能通过传递一个更派生的接口来实现这一点 该接口确实实现了基本要求 无论传递什么实例 它仍然会实现基础 我是否遗漏了什么 namespace Test
  • 搜索标签,然后将标签之间的文本保存为变量

    我对 Java 很陌生 但是我如何在文件中搜索标签 然后标签之间的所有内容 如文本字符串 将被分配给一个变量 例如 我有 但后来我想将字符串 THE TITLE 保存到一个名为 title1 的变量或其他变量中 我应该怎样做呢 谢谢 如果你
  • 结构赋值是否保证填充也相等

    假设我有一个包含 2 个字段的结构 并且我的 C 实现在这些字段之间也有一些填充 如果我创建结构体的两个变量并将一个变量分配给另一个变量 是否可以保证填充相等 我知道对于大多数编译器来说都是如此 因为它们只是调用 memcpy 但我想知道标
  • DB.eval() 与 Mongo Java 驱动程序

    我准备了一些在 Mongo 上执行的脚本 它按照命令行的预期工作 mongo 127 0 0 1 27017 dbName script js 但是当我尝试在 java scala 代码中移动它时 它不起作用 db eval scriptC
  • SQL Server 中 mysql“LIMIT”子句的等效语法是什么

    SQL Server 中 MySQL LIMIT 子句的等效语法是什么 我想用它来对我的结果进行分页 想要显示记录5到10 最接近的是 TOP Select top 5 from tablename 您可以获得一个范围 第 5 10 行 S
  • SAPUI5 路由配置中“controlAggregation”的含义是什么?

    我真的不明白下面的属性 controlAggregation 对于路由 SAPUI5 应用程序有何作用 不存在具有该 id 的元素 我在此处找到的演示应用程序中的任何位置都找不到对 页面 的任何引用 SAPUI5路由演示 https sap
  • java indexof(String str) 方法复杂性[重复]

    这个问题在这里已经有答案了 可能的重复 String indexof 函数调用的成本 复杂性是多少 https stackoverflow com questions 3562919 what is the cost complexity
  • 使用未声明的类型“PHAsset”BSImagePicker

    我在 swift 中从 CocoaPods 导入了一个模块 我做了所有需要做的事情 而且它也有效 因为模块已成功导入 我现在想测试 BSimagepicker 的一些演示脚本 但它显示未声明的类型 PHAsset 我需要做的是选择不同的图像
  • 如何在 Spark RDD 中比较不区分大小写的字符串?

    我有以下数据集 drug name num prescriber total cost AMBIEN 2 300 BENZTROPINE MESYLATE 1 1500 CHLORPROMAZINE 2 3000 想要从上面的数据集中找出
  • 以编程方式安装 Chrome 扩展程序

    我知道这个问题已经被问了很多 我读了所有这些 但找不到与我的问题相关的任何内容 所以再次询问 我做了一个简单的 chrome 扩展 还使用 chrome 将其打包为 crx 我想使用 nsis 或 C 安装程序以编程方式安装它 从这里得到一
  • 将 setDate 与 jQueryUi 日期选择器结合使用

    我正在尝试将另一个日期选择器的日期设置为距原始日期选择器关闭整整 1 年 我有以下代码 myDatepicker1 datepicker onClose function dateText inst myDatepicker2 datepi
  • 蟒蛇+igrph。类型错误:绘图不可用

    我想使用python笔记本 igraph包来画图 示例代码在这里 我认为是对的 pip install cairocffi import cairocffi as cairo corlor for i in g vs name if set
  • 适用于 Android 的 YouTube Api 异常“service_missing”

    我想在我的 Android 应用程序中播放 YouTube 视频 我在 YouTube 初始化时遇到异常 例如 service missing 我写下面的代码 package com example youtubedemo import a
  • 现在 Xna 不受支持,什么是更好的选择? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 节点 UnhandledPromiseRejectionWarning

    我的 npm 包有一个问题 就像这个问题 但我不知道如何解决 什么是未处理的 Promise 拒绝 https stackoverflow com questions 40500490 what is unhandled promise r
  • Android 手机中的部分唤醒锁功耗

    我正在创建一个远程服务来保持 PARTIAL WAKE LOCK 以便不断地 做一些后台工作 我预计 Android 设备的功耗范围是多少 由此 在我的设备上 从充满电开始测量 电池续航时间在 30 分钟到 2 小时之间 None
  • 如何使用 XMLHttpRequest 在后台下载 HTML 页面并从中提取文本元素?

    我想制作一个 Greasemonkey 脚本 当您在 URL 1 中时 该脚本会在后台解析 URL 2 的整个 HTML 网页 以便从中提取文本元素 具体来说 我想下载整个页面的 HTML 代码 a烂番茄page 在后台并将其存储在变量中
  • 如何将包含多个部分的 CSV 文件导入到 R 中?

    我想将csv文件的内容导入到R中 csv文件垂直包含多个数据部分 由空行和星号分隔 例如 SAMPLE DATA Name DOB Sex Rod 1 1 1970 M Jane 5 7 1980 F Freddy 9 12 1965 M
  • Android listview 带有复选框的问题

    我有一个奇怪的问题 我正在尝试创建一个带有复选框的列表视图 在我的另一个thread https stackoverflow com questions 5438375 custom listview with checkbox probl