带 CursorAdapter 的 ListView 中的复选框侦听器

2024-02-29

我有一个非常相似的问题这个帖子 https://stackoverflow.com/questions/5444355/android-listview-with-checkbox-problem。在 ListView 的每一行中,我都有一个带有侦听器的复选框。监听器更新数据库行。

@Override
public void bindView(View v, Context context, Cursor c) {
    TextView tvA = (TextView) v.findViewById(R.id.adi_tv_activity);
    CheckBox cb = (CheckBox) v.findViewById(R.id.adi_cbox);
    tvA.setText(c.getString(c.getColumnIndex("name")));
    final long id = c.getLong(c.getColumnIndex("_id"));
    final Context ctx = context;
    cb.setOnCheckedChangeListener(new OnCheckedChangeListener(){
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            ObjDBF dbf = new ObjDBF(ctx); //Object thet update db
            if(isChecked) {
                dbf.tbActivitiesUpdateState(id, true);  
            } else {   
                dbf.tbActivitiesUpdateState(id, false);     
            }
        }               
    });
    if (c.getBoolean(c.getColumnIndex("state"))) {
        cb.setChecked(true);
    } else {
        cb.setChecked(false);
    }
}

我有两个问题。

  1. 滚动问题。移动列表时,我丢失了从屏幕上消失的行的复选框状态。
  2. 每当我使用 setChecked 时,都会调用侦听器,从而导致新的数据库更新。

为了解决滚动问题,我想在每次更新数据库时使用adapter.changeCursor,但对于第二个问题,它会导致循环。

我还尝试使用数组,如上面链接帖子的第二个答案中所示,但它使用方法 getView od 适配器,我有一个cursorAdapter 并在 newView 和 bindView 中工作

我该如何解决这个问题?

编辑:auselen 解决方案有效,但它创建和销毁了很多侦听器,还有其他更有效的解决方案吗?


为了避免在侦听器上触发回调,您应该通过以下方式取消注册现有侦听器:cb.setOnCheckedChangeListener(null)然后设置cb.setChecked(c.getBoolean(c.getColumnIndex("state"))) then cb.setOnCheckedChangeListener() again.

但是你应该想出更好的使用方法OnCheckedChangeListener,因为您最终会创建超出需要的侦听器。

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

带 CursorAdapter 的 ListView 中的复选框侦听器 的相关文章

随机推荐

  • Fluent nHibernate 和 asp.net MVC 入门

    我考虑使用 Fluent nhibernate 通过我的 asp net mvc web 应用程序进行数据访问 任何描述如何使用 asp net mvc web 应用程序设置 Fluent nHibernate 的好文章 This seri
  • Laravel 迁移 - 完整性约束违规:1452 无法添加或更新子行:外键约束失败

    我正在尝试对表运行迁移inventories我通过这次迁移创建的 Schema create inventories function Blueprint table table gt increments id table gt inte
  • 使用正则表达式前瞻,egrep

    如果您的文件包含 apples are good apple cider is also good 为什么会egrep apples app file无法接听任何线路 在 MAC 上使用egrep 2 5 1 扩展正则表达式不具有积极的前瞻
  • 实体框架 4.1 InverseProperty 属性

    只是想了解更多RelatedTo属性 我发现它已被替换为ForeignKey and InversePropertyEF 4 1 RC 中的属性 有谁知道有关此属性变得有用的场景的任何有用资源 我应该在导航属性上使用此属性吗 例子 publ
  • 使用 Rails 测试 PayPal

    我需要测试新的 PayPal 与我的应用程序的集成 我在开发环境中使用 PayPal 沙箱 为了测试整个界面 我发现ngrok https ngrok com 可能会解决来自 PayPal 的消息问题 我使用安装了 ngrokapt get
  • 如何在 IBM DB2 中的导出结果中包含列标题

    我试图使用命令从 DB2 中的表中导出数据 我想导出到 csv 文件中 但是列标题不存在 还需要列标题 那么我可以在 sql 查询中添加什么也获取列标题 这在最新的 2019 Db2 11 5 版本和 Db2 Warehouse 本地和云上
  • 电池使用情况 - iOS

    我想在应用程序的状态栏上显示应用程序的电池使用情况 它使用 GPS 因此 GPS 信号和应用程序的电池使用详细信息对于用户了解电池消耗情况很有用 有没有办法获取设备的电池使用情况 并仅显示消耗的电池量my app独自的 在仪器上 它显示随时
  • 带有目标目录的符号链接二进制文件

    我有一个二进制文件 它加载具有相对路径的资源 我想在 usr bin 中放置一个链接 我努力了ln s game directory game usr bin game 它启动了我的二进制文件 但无法加载我的资产 因为它显然找不到文件夹 a
  • 在搜索栏步骤上方添加具有不同字体大小的标签,与搜索栏拇指垂直对齐

    I would like to create a Seekbar above which there will be text label on each Seekbar step what it should look like is s
  • 使用 C# 设置进程“图像名称”和“描述”

    我想尽可能详细地讨论这个问题 这样问题就很容易理解answer able 本质上我需要一种设置方法进程名称 and 流程说明在应用程序上使用 C startup 这是我想要更改的示例 Note 我想用代码设置我自己的 C 应用程序图像和描述
  • 简单数据类型的互斥锁

    我对并发还很陌生 并且在决定如何使用互斥体时遇到困难 目前 它们散布在我的代码中两个线程交互的地方 这种互斥体的使用是否合适 class Foo public void SetMember int n AcquireMutex n n Re
  • 迭代 ArrayList 中的连续对象对

    我想从 ArrayList 获取对象对 以便可以在每个对象的元素之间执行计算 理想情况下 它应该迭代成对的对象 例如 在包含 obj1 obj2 obj3 obj4 的列表中 它应该遍历 obj1 obj2 obj2 obj3 和 obj3
  • 隐藏UIImagePickerControllerSourceTypceCamera工具栏,但具体按钮?

    为了使我的自定义工具栏在我的UIImagePickerControllerSourceTypeCamera 我必须像这样关闭相机控制 pickerOne showsCameraControls YES 我想展示变焦 闪光灯 切换相机以及对焦
  • 如何从 WSDL 文件生成 java 类

    我正在开发一个 Android 应用程序 我需要使用网络服务 我有一个 wsdl 文件 但我想将其转换为 java 以便我可以在我的 Java 程序中使用它的功能 有没有办法将 wsdl 文件转换为 Java 是的 您可以使用 Wsdl2j
  • 如何确保 CSS 在所有浏览器上都能正常工作,而无需在每个浏览器上进行肉眼测试?

    让一个网站的CSS支持不同版本的所有浏览器确实是一件很困难的事情 特别是 它需要设置不同的浏览器 我只是想知道是否可以测试 CSS 并确保它适用于所有浏览器 而无需打开每个浏览器并手动检查布局 或者 有没有快速或标准的方法来做到这一点 使用
  • Windows Phone 8.1 应用程序与数据库连接

    我对 Windows Phone 8 1 应用程序开发完全陌生 我正在尝试使用 Visual Studio 2013 开发一个带有数据库的简单应用程序 它不是 silverlight 应用程序 我的应用程序只有一个文本字段和一个按钮 我在本
  • Shutil.move(scr, dst) 得到 IOError: [Errno 13] Permission returned and 3 more Errors

    Documents pdf docx txt for i in range len Documents if glob glob Documents i print Documents i True shutil move glob glo
  • scipy 不使用 anaconda 的本地库作为 libgcc

    我在用着Anaconda 4 10 3 with Python 3 9 7 Scipy 1 7 1 on Ubuntu 16 04 6 我需要运行的脚本使用 Scipy 的优化 并抛出以下错误 ImportError usr lib x86
  • 自定义 AWS Amplify UI?

    相信我可能会以错误的方式处理这个问题 并且非常感谢有关该问题的指导 我使用 React Native 和 AWS Amplify 进行身份验证 我想做的是改变元素的颜色和大小 看到其他人提到使用主题 但没有任何效果 例如 更改登录按钮的颜色
  • 带 CursorAdapter 的 ListView 中的复选框侦听器

    我有一个非常相似的问题这个帖子 https stackoverflow com questions 5444355 android listview with checkbox problem 在 ListView 的每一行中 我都有一个带