ListView+checkBox删除需求实现以及注意事项

五个Qt Design Studio项目实战,从布局到导航玩转QML组件 GUI开发中,组件库与布局管理是构建应用的基础。QML作为Qt的声明式语言,通过属性绑定与状态切换,让界面与逻辑得以解耦。Qt Design Studio将可视化编辑与QML代码生成结合,使开发者能直观理解组件属性、信号与动画机制。从打卡签到、硬件控制台、商品列表到数据可视化、多页面导航,这些典型应用场景覆盖了Qt Quick的核心组件。相较于死记硬背组件清单,以项目驱动的方式学习,能更快掌握模型-视图-委托、Canvas绘制、StackView导航等关键概念。通过五个代表性小项目的拆解,开发者能学会在实际 阅读详情

一、概述

一般项目都会有删除的功能,一般都会用到checkbox,通过点击checkbox选择要选择的条目,并且item也可以点击,点击后,可以进到条目的详情,例如新闻类似的。

二、效果截图



三、实现过程

1、自定义条目layout( android:descendantFocusability="blocksDescendants"此属性比较重要,最后总结会提到)

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:descendantFocusability="blocksDescendants"
    android:padding="10dp" >

    <TextView
        android:id="@+id/id_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:padding="10dp"
        android:textColor="@android:color/black"
        android:textIsSelectable="true"
        android:textSize="15sp" >
    </TextView>

    <CheckBox
        android:id="@+id/id_checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true" />

</RelativeLayout>

2、自定义adapter(ViewHolder,就绑定的两个控件,代码就不贴出了)

@Override
		public View getView(final int position, View convertView,
				ViewGroup parent)
		{
			ViewHolder holder = null;
			if (convertView == null)
			{
				convertView = View.inflate(context,
						R.layout.listview_item, null);
				holder = new ViewHolder();
				holder.textView = (TextView) convertView
						.findViewById(R.id.id_text);
				holder.checkBox = (CheckBox) convertView
						.findViewById(R.id.id_checkbox);
				convertView.setTag(holder);
			} else
			{
				holder = (ViewHolder) convertView.getTag();
			}

			holder.textView.setText(list.get(position).get("itemTitle"));
			if ("No".equals(list.get(position).get("isChecked")))
			{
				holder.checkBox.setChecked(false);
			} else
			{
				holder.checkBox.setChecked(true);
			}
			/**
			 * 这里一定要处理checkbox的点击事件而非setOnCheckedChangeListener,那样做不起作用会出错
			 */
			holder.checkBox.setOnClickListener(new OnClickListener()
			{

				@Override
				public void onClick(View v)
				{
					CheckBox checkBox = (CheckBox) v
							.findViewById(R.id.id_checkbox);
					if ("No".equals(list.get(position).get("isChecked")))
					{
						//通过点击改变选中状态以及改变list里面相应的值
						checkBox.setChecked(true);
						list.get(position).put("isChecked", "Yes");

					} else
					{

						checkBox.setChecked(false);
						list.get(position).put("isChecked", "No");
					}
					//然后再更新界面就可以了
					notifyDataSetChanged();
				}
			});
			return convertView;
		}
3、全选点击事件:

selectAll.setOnClickListener(new OnClickListener()
		{

			@Override
			public void onClick(View v)
			{
				if (isSelectAll)
				{
					isSelectAll = false;
					selectAll.setText("全选");
					for (Map<String, String> map : list)
					{
						map.put("isChecked", "No");
					}

				} else
				{
					isSelectAll = true;
					selectAll.setText("全不选");
					for (Map<String, String> map : list)
					{
						map.put("isChecked", "Yes");
					}

				}
				adapter.notifyDataSetChanged();
			}
		});
4、delete按钮点击事件

// 删除按钮点击事件
		delete.setOnClickListener(new OnClickListener()
		{

			@Override
			public void onClick(View v)
			{
				// 注意点:在每次点击时清除存取正在被选中的item position,要不然,每次点击可能会重复添加
				selectedPositiones.clear();
				for (int i = 0; i < list.size(); i++)
				{
					if ("Yes".equals(list.get(i).get("isChecked")))
					{
						Map<String, Integer> map = new HashMap<String, Integer>();
						map.put("selectedPosition", i);
						selectedPositiones.add(map);
					}
				}
				// 当存取已选择的条目集合大于0时,展示dialog对话框,反之提醒用户选择想要删除的条目
				if (selectedPositiones.size() > 0)
					initMyDialog();
				else
					Toast.makeText(context, "请选择您要删除的项目!", Toast.LENGTH_SHORT)
							.show();

			}

		});

5、删除方法

private void deleteWay()
	{
		if (isSelectAll)
		{
			// 删除全部
			list.clear();
			Toast.makeText(context, "全部删除成功", Toast.LENGTH_SHORT).show();
		} else
		{
			// 删除单个或一组,倒叙以此删除,可以避免并发修改异常
			for (int i = list.size() - 1; i > -1; i--)
			{
				if ("Yes".equals(list.get(i).get("isChecked")))
				{
					list.remove(i);
				}
			}

		}
		adapter.notifyDataSetChanged();
	}
6、dialog加载方式参考我的另一篇文章《圆角dialog》

四、总结以及注意点

注意:

1、 android:descendantFocusability="blocksDescendants"   这个属性很重要,需要在listview_item.xml根控件添加,如果不添加,会造成setOnItemclickListener事件失效,那为什么会这样呢?

      是因为item里面如果有button或者checkbox他们会优先抢占焦点,所以listview的item点击事件就无法发生效用,这个属性又是什么意思呢?

属性的值有三种:

        beforedescendants:viewgroup会优先其子类控件而获取到焦点

        afterdescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点

        blocksdescendants:viewgroup会覆盖子类控件而直接获得焦点

而我们选择的第三个,就可以解决我们的问题

2、注意的点就是每次点击时用于存取是否选中的list集合都要先清空,要不然就会出错

总结:计算机思维方式很重要,继续努力吧,有问题随时问我


Qt QML与C++数据交互:列表模型绑定与性能优化实战 在Qt跨平台应用开发中,数据模型与UI视图的高效同步是核心挑战。Model-View架构通过数据与表现分离的原理,实现了业务逻辑与界面的解耦,其技术价值在于提升代码可维护性和响应性能。QML作为声明式UI语言,与C++后端的数据绑定,尤其是列表数据的动态交互,是构建复杂桌面与嵌入式应用的关键。针对列表数据交互,Qt提供了QQmlListProperty、QAbstractListModel和QVariantList等多种机制,其中QAbstractListModel凭借其完整的角色系统、精细的数据变更通知和 阅读详情

相关推荐

高考后个人成长APP开发指南:Flutter+FastAPI技术实现与部署

在移动应用开发领域,前后端分离架构已成为主流技术范式,它通过清晰的API接口定义实现客户端与服务端的解耦。其核心原理在于客户端专注于用户界面与交互逻辑,服务端则负责数据处理与业务规则,二者通过RESTful API进行通信。这种架构的价值在于提升开发效率、便于团队协作,并能支持多端一致体验。在个人成长与学习管理类应用场景中,该技术栈能有效支撑目标追踪、习惯养成等核心功能。本文以高考后学生自我提升工具为具体案例,详细解析如何运用Flutter与FastAPI技术栈,结合SQLite数据库,实现一个具备任务管理

weixin_34293246的博客 426

android+listview多选删除,Android ListView的批量处理(多选/反选/删除)

在Android开发中经常遇到使用ListView的情况,有时候需要的不仅仅是列表显示,还有长按列表进行多选,并且批量删除的情况,在这里记录一下自己的所学。先上效果图:几个需要用到的核心方法://设置多选模式,下面的方法基于设置多选模式list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);//获取Item选择状态:list.isItemChecked(...

weixin_39633171的博客 1222

全面掌握Android中ListView与CheckBox绑定及功能实现

在Android开发中,ListView是常用的组件之一,它能够以列表形式展示数据集合。自定义ListView不仅可以提升应用的用户体验,还可以更好地融入到应用的整体风格中。本章节将介绍如何自定义ListView的布局,使其包含一个文本视图(TextView)和一个复选框(CheckBox)。BaseAdapter类是Android开发中用于将数据与界面进行绑定的重要适配器。该类是抽象类,提供了若干抽象方法,必须由子类实现。

weixin_42466857的博客 309

Android Listview与Checkbox结合实现选择,删除,显示选择结果

网上有很多Listview与Checbox结合的例子,大多都存在这样那样的问题,要么选择异常,要么滚动Listview后选择消失,要么删除异常,要么无法正常显示选择结果。 以下为真正无误的,实用的Listview与Checkbox结合实现选择,删除,显示选择结果。 MainActivity.java package com.example.listviewcheckbox; impor

xinzheng_wang的博客 1万+

android ListView实现多选,批量删除

可以多选批量删除的item的ListView,实现勾选的隐藏和显示

listview 多选删除

listview 点击弹出多选框,多选删除操作,gridview类似

Android 长按Listview显示CheckBox,实现批量删除

Android 长按Listview显示CheckBox,实现批量删除

ddxxll2008的专栏 1万+

Android 带CheckBox的ListView 实现多选,全选,反选,删除效果

实现全选删除效果

android完美解决ListView中CheckBox的全选、反选、批量删除的问题

效果图 前几天看到有朋友发帖问关于ListView的多选、反选、取消等问题,我自己想了一下,最好的解决方法应该是生成一个list来维系checkbox组的选择状态。利用listview的getChildAt方法来获得当前状态会有很多很多的问题,所以不建议采用。另外,本文来增加了一个关于被选择的checkbox删除的功能,供大家参考思路 利用SparseArray<Boolean> checkBox

selfreeyuan的博客 9811

Listview checkbox 单选,多选,删除,单击选择,显示选择结果

真正可用的,无误的,不存在选择异常的android listview与checkbox结合的源码,具有单选,多选,全选,取消全选,删除,单击选择,显示选择结果功能。

Android中ListView绑定CheckBox实现全选增加和删除功能(DEMO)

本文通过实例给大家讲解了Android中ListView绑定CheckBox实现全选增加和删除功能(DEMO)的代码,对android checkbox全选相关知识感兴趣的朋友一起学习吧

多选删除,listview滑动时checkbox错位措施

1、滑动时checkbox错位措施:1、首先,给checkbox设置settagholder.deleteCheckBox.setTag(getDataIndex().get(position).get("dataIndex").toString()); 2、然后,存checkbox的check值,要注意事项:adapter每次取得一个屏幕外的item时,都会重新调用getview(

kaleir的博客 664

雪莉果的Axure原型工厂vol.006 中继器应用(二)——多选穿梭框

如果你用axure有一段时间了,那么你很快就能琢磨出一个大体设计流程,比如加一个中间过度的元件,来储存需要穿梭的内容;但是如果你再想一想,就会发现,这样做,似乎只能解决单选,那么多选需要怎么操作呢? 这时候,中继器就会告诉你,我还能做的更多。

weixin_43829792的博客 976

android checkbox注意事项 错乱记录

我们在使用checkbox时 往往会遇到listview中使用checkbox做单选的情况。 做法就是 建立数据模型 在模型中创建一个字段用以判断状态 可以叫isCheck等等, setOnCheckedChangeListener监听 写在setChecked方法前 setOnCheckedChangeListener监听中 改变数据列表中模型状态(set方法使用)选中 不选中情况 或...

Lchannel的博客 585

51单片机也能玩转GC9A01彩屏?超详细移植指南与性能优化技巧

本文详细介绍了如何在51单片机上高效驱动GC9A01彩屏,包括硬件连接优化、SPI模拟驱动、内存管理策略及高级刷新技术。通过分段缓冲、颜色压缩和差异化刷新等技巧,显著提升显示性能,使51单片机也能流畅运行240x240分辨率的彩色TFT屏幕。

hp777的博客 189

Windows 11 安装 Maven:下载、安装、配置国内镜像、验证

本文详细介绍了在 Windows 11 系统中安装与配置 Apache Maven 的完整流程,包括 JDK 环境准备、Maven 下载解压、本地仓库路径设置、阿里云国内镜像加速配置、环境变量设置及安装验证。同时提供了常用 Maven 命令速查表,帮助开发者快速上手依赖管理与项目构建,提升开发效率。

寒水馨 · 轻量级技术文档 · hanshuixin.org 1502

emWin控件深度解析:从BUTTON/CHECKBOX原理到自定义绘制实战

在嵌入式GUI开发中,控件是构建用户界面的基础元素,其核心原理基于事件驱动与状态机模型。通过窗口管理器机制,控件接收并处理用户输入事件,同步更新内部状态并触发图形渲染。掌握控件的自定义绘制能力,对于实现品牌化UI、优化性能及创建动态交互效果具有重要技术价值,尤其在资源受限的嵌入式场景下。本文以emWin图形库中的BUTTON和CHECKBOX控件为例,深入剖析其事件响应机制,并重点讲解如何利用WIDGET_DRAW_ITEM_FUNC回调函数实现高级自定义绘制,帮助开发者突破默认样式限制,打造高效、独特的嵌

weixin_34406086的博客 413

毕设助力!从0到1构建基于YOLO的家居安防异常活动监测系统,让你的毕设守护家庭安全

做完这个项目,你会发现自己完整走过了“数据采集→标注→模型训练→功能集成→界面开发”的毕设全流程,这不仅是技术能力的证明,更是对“技术守护生活”这一理念的实践。答辩时,你可以重点讲这几点:系统解决了家居安防的哪些痛点、对比了不同YOLO模型的性能差异、系统未来能怎么优化(比如对接智能门锁/报警器、实现语音交互)。未来,这个系统还能往“更智能”的方向发展:比如结合行为分析判断异常意图、开发移动端APP实现全屋设备联动、在智慧社区中实现多家庭联防……想象空间很大。

LXY_LOVE36的博客 120

窗体winforn的学习

展示数据列表,模拟 Windows 资源管理器,支持大图标、列表、详细表格等展示方式。,是 Windows 应用程序的主窗口,所有按钮、文本框等控件都必须放置在窗体上。,节省界面空间,支持选择 / 输入(可配置),常用于性别、城市、分类选择。用户点击后执行指定操作(登录、提交、查询、清空),是界面交互的核心控件。,是最常用的输入控件(账号、密码、备注、内容编辑等)。,支持多选(如兴趣爱好、权限勾选、功能开关)。(头像、图标、广告图、本地 / 网络图片)。

pqd666的博客 646

YOLO系列算法改进 | C3k2改进篇 | 融合DEConv细节增强卷积模块 | 细节增强+多分支差分卷积融合,标准卷积的完美涨点替代! | TIP 2024

YOLO系列算法改进 | C3k2改进篇 | 融合DEConv细节增强卷积模块 | 细节增强+多分支差分卷积融合,标准卷积的完美涨点替代! | TIP 2024 (以YOLO26最新目标检测模型为基础,融合C3k2_DEConv创新模块进行改进)

2502_91881744的博客 310

【用unity实现100个游戏之1】制作类元气骑士、挺进地牢——俯视角射击游戏多种射击效果(二)(附源码)

这篇文章我们将继续实现曲线射击与两种不需要实体子弹的射击方式 源码在文章末尾。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 5060

QML树控件TreeView使用指南

QML树控件TreeView使用指南 去发现同类优质开源项目:https://gitcode.com/ 在Qt5.5以前的版本中,开发者通常使用ListView组件来模拟树控件的结构。但从Qt5.5版本开始,QML开发环境中引入了专门的树控件——TreeView。本篇资源文件旨在详细讲解QML中TreeView的使用方法,包括树节点的增加与删除,以帮助开发者更高效地构建树形结构的用户界面。 内容概...

gitblog_06785的博客 306

STM32入门教程:图像处理

然后,我们使用 STM32 的 DSP 模块中的 arm_mean_u8 函数计算原始图像的平均值,并将结果存储在 meanValue 变量中。然后,我们需要编写代码配置 STM32 的外部中断输入引脚,并在中断处理函数中读取 OV7670 摄像头模块输出的图像数据。然后,我们需要编写代码配置 STM32 的 USB OTG 接口,并在回调函数中读取 USB 摄像头输出的图像数据。一、图像采集 图像采集是图像处理的第一步,我们需要将外部图像源的数据导入到 STM32 中进行处理。

2401_85625565的博客 1616

安卓开发常见错误原因及解决方法

做安卓开发一年半了,遇到过不少的问题,其中有些花了不少时间才得到解决,有些至今不知为何,也请高人指点迷津,为我拨云见日~~有错误也多多包涵,帮我纠正~~ 1.更换安卓项目的库文件(即使库文件代码相同),运行工程挂掉。     解决方法:将原来的app卸载再运行   2.R文件丢失:(一般是资源文件有错,特别是clean之后)   原因:res文件夹的xml文件(不仅是l

易水南风的专栏 3544

22、忆阻器、忆阻系统及其神经形态应用综述

本文综述了忆阻器与忆阻系统的理论基础及其在神经形态系统中的广泛应用。从忆阻器的基本定义出发,介绍了其在非线性电路、存储技术、通信和神经形态计算等领域的应用潜力。重点探讨了基于忆阻器的神经元模型(如Hodgkin-Huxley、FitzHugh-Nagumo和Hindmarsh-Rose模型)、突触实现方式及多种忆阻神经网络架构,包括细胞神经网络、脉冲神经网络和递归神经网络等。此外,深入分析了忆阻器在水库计算中的理论研究与硬件实现进展,展示了其在时间序列处理、模式识别和信号预测等方面的优异性能。尽管忆阻技术前

kiwi8的博客 207

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: Android自定义搜索界面,搜索词单独设置颜色
下一篇: Android ExpandableListView单选以及多选实现
不年少还青春
博客等级 码龄13年 5粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值