Codename One 轻量Picker组件iOS端可选空值是否需要官方修复?
Codename One轻量Picker空值问题解答
结论
该问题属于Codename One轻量Picker组件的平台适配bug,确实需要官方层面修复。
相关说明
- 从组件设计逻辑来看,Picker本身的定位就是让用户从预设列表中选择有效值,本就不应该允许返回null这类不在预设列表内的结果。目前Android端的实现已经符合预期,iOS和模拟器端是因为滚动边界限制、超出边界后的回弹逻辑存在漏洞,才会出现滚动到空白区域后无法复位、最终返回null值的问题。
- 你目前使用的监听器临时规避方案可以解决业务逻辑报错问题,但体验上存在瑕疵:比如用户滚动到列表顶部空白区域时,被强制赋值为最后一项的逻辑不符合用户直觉,你可以优化临时方案,存储上次的有效选中索引,遇到null值时复位到该索引,体验会更顺滑:
// 优化后的临时规避方案 AtomicInteger lastValidIndex = new AtomicInteger(0); pick.addActionListener((ActionListener) (ActionEvent evt) -> { String selected = pick.getSelectedString(); if (selected == null) { pick.setSelectedStringIndex(lastValidIndex.get()); } else { lastValidIndex.set(pick.getSelectedStringIndex()); } });
- 官方修复的成本很低,只需要对齐Android端的实现逻辑,给轻量Picker的滚动容器添加上下边界校验,禁止滚动到超出第一个和最后一个选项的空白区域,即可从根源解决该问题,不需要上层开发者做额外兼容。
内容的提问来源于stack exchange,提问作者J-J
相关产品推荐
相关产品推荐

