如何获取滚轮停止后的选中值wheel-picker-cj 滚动监听与回调机制详解【免费下载链接】wheel-picker-cj滚轮选择UI组件项目地址: https://gitcode.com/Cangjie-TPC/wheel-picker-cjwheel-picker-cj是一个基于仓颉语言的滚轮选择 UI 组件库提供日期、地区、年、月、日、自定义等多种选择器。很多新手最常问的一个问题就是滚轮停下来之后我怎么知道用户选中了哪一项本文带你快速搞懂它的滚动监听与回调机制几行代码即可拿到选中值。一、原理选中值在「滚动停止」那一刻才会回调理解 wheel-picker-cj 的回调机制先要知道内部三个滚动事件的分工事件触发时机作用onScroll滚动过程中持续触发同步选中幕布、记录偏移量onScrollEnd手指离开且滚动停止后对齐吸附、计算选中索引、触发选中回调onScrollEdge滚到顶部/底部边缘循环模式下无缝衔接的数据位移也就是说组件会等你松手、滚轮彻底停稳并完成对齐吸附之后才把最终选中项的位置索引和数据交给你的监听器。以年选择器为例回调正是在onScrollEnd中发起的核心逻辑见 wheel_year_picker_component.cj先根据偏移量对齐到最近的整行再取出mOnItemSelectedListener并调用onItemSelected(position, data)。 这就解释了新手常见疑惑为什么快速滚动时收不到回调因为组件只关心最终停在哪里滚动中的中间状态不会触发。二、两种回调接口一张表看懂监听器所有回调接口集中定义在 listener.cj接口适用选择器回调方法参数含义OnItemSelectedListener年、月、日、日期选择器onItemSelected(position, data)选中项索引 选中值OnAreaSelectedListener地区三级联动选择器onProvinceSelected/onCitySelected/onAreaSelected各级的索引 名称两者的共同点都在对应滚轮停止并吸附完成后触发拿到的就是用户最终确认的选中值。三、年/月/日选择器一行代码注册监听年、月、日选择器都通过 Model 的setOnItemSelectedListener()注册监听可链式调用this.showWheelYearPicker this.showWheelYearPicker .setYearRangeStart(1972) .setYearRangeEnd(2025) .setOnItemSelectedListener(MyOnItemSelectedListener())然后实现监听接口滚轮停止后就能弹出选中值public class MyOnItemSelectedListener : OnItemSelectedListener { public func onItemSelected(position: Int64, data: Int64): Unit { PromptAction.showToast(message: 选中索引${position}选中值${data}) } }position选中项在数据列表中的索引data选中的值年选择器中即年份数字完整示例可参考 wheel_year_picker.cj 与官方文档 feature_api.md 的年选择器章节。四、自定义选择器用 setSelectDataShow 拿选中数据自定义选择器的数据是字符串数组它的回调方式是闭包setSelectDataShow()参数就是选中的文本.showWheelPickerMiddle this.showWheelPickerMiddle .setData(this.arr) .setSelectDataShow({ text: String PromptAction.showToast(message: Centre: text) })实现细节在 wheel_picker_component.cj组件先用onTouch记录手指抬起滚动停止时再计算吸附位置最后调用mSelectDataShow(mSelectedData)。 小技巧如果不想等回调也可以随时主动查询当前值——getCurrentItemPosition()拿索引、getCurrentItemData()拿数据。五、地区选择器三级联动各滚轮独立回调地区选择器是省/市/区三个滚轮联动每一级停止时都会分别回调非常适合做地址校验public class MyOnAreaSelectedListener : OnAreaSelectedListener { public func onProvinceSelected(provincePos: Int64, provinceName: String): Unit { PromptAction.showToast(message: 选中省份${provincePos} - ${provinceName}) } public func onCitySelected(cityPos: Int64, cityName: String): Unit { PromptAction.showToast(message: 选中城市${cityPos} - ${cityName}) } public func onAreaSelected(areaPos: Int64, areaName: String): Unit { PromptAction.showToast(message: 选中地区${areaPos} - ${areaName}) } }通过setOnAreaSelectedListener()注册即可示例见 wheel_area_picker.cj。回调触发点分别位于 wheel_area_picker_component.cj 中省、市、区三个滚轮的onScrollEnd分支内。六、新手常见坑与排查清单✅监听器没注册务必在aboutToAppear()中链式调用setOnItemSelectedListener()漏掉这一步回调永远不触发。✅索引 ≠ 值position只是数组下标真正的选中值要看data年选择器或名称地区选择器。✅回调只认停止快速滑动过程中没有回调这是设计使然若需要滚动中实时更新需自行监听onScroll自行换算。✅自定义选择器的触发前提它依赖手指抬起事件程序化滚动不会触发setSelectDataShow回调。✅想直接读当前值各 Model 都提供主动查询方法如getSelectedItemPosition()、getCurrentItemData()、getYear()/getMonth()/getCurrentDate()无需等待回调。七、核心文件速查回调接口定义wheelpicker/src/main/cangjie/listener.cj自定义选择器组件回调触发实现wheelpicker/src/main/cangjie/wheel_picker_component.cj年选择器组件监听回调示例wheelpicker/src/main/cangjie/wheel_year_picker_component.cj地区选择器组件三级联动回调wheelpicker/src/main/cangjie/wheel_area_picker_component.cj完整 API 与示例doc/feature_api.md掌握这套「滚动停止 → 吸附对齐 → 监听器回调」的机制后你就可以在任意页面中把用户选中的值安全地拿到手放心接入业务逻辑啦 【免费下载链接】wheel-picker-cj滚轮选择UI组件项目地址: https://gitcode.com/Cangjie-TPC/wheel-picker-cj创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Oceanology_FluidNinja水体波纹交互条件 插件:Oceanology_Plugin、WaterInteractionPlugin、FluidNinjaLive一、可以实现水体波纹交互的条件1.必须是蓝图
2.蓝图轴心也可产生交互,要不想要轴心交互需将模型体碰撞复杂度改为“将复杂碰撞改为简单碰撞”
3.必须是UE自带的几何体才会产生交互&… · 2026/9/25 3:20:05
AI时代钓鱼邮件攻防:从攻击手法到防御实战指南 邮件安全圈子里有一句话正在被越来越多的人提起:真正危险的钓鱼邮件,已经不是那种满屏错别字、一眼就能识破的“尼日利亚王子”了。过去我们判断钓鱼邮件,靠的是“不对劲”的直觉——语法别扭、措辞生硬、语气突兀。但如今,大语言… · 2026/9/25 3:20:05
WeKnora本地部署指南:构建100%安全的私有RAG知识库 1. 项目概述:为什么WeKnora值得你花两小时部署一个私有知识库?“保姆级教程!手把手教你本地部署WeKnora,打造100%安全的私有知识库!”——这个标题里藏着三个关键信号:WeKnora、本地部署、100%安全。它不是… · 2026/9/25 4:24:24
Android 12下sensor_fusion脚本adb调试实战:从权限到排错全流程 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:24:17
Jetson Orin Nano GPIO配置避坑指南:从寄存器到设备树实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:24:17
开源电视直播方案:my-tv壳源分离原理与M3U直播源配置维护指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:24:17
RK3128机顶盒刷机全攻略:驱动安装、固件选择与避坑指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:24:17
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37