拓冰建站拓冰建站
首页 / 资讯中心 / 正文

如何获取滚轮停止后的选中值:wheel-picker-cj 滚动监听与回调机制详解

如何获取滚轮停止后的选中值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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门