Kotlin Android Studio 设置drag listener 缺少参数l报错问题求助
Android OnDragListener 使用说明
报错原因
No value passed for parameter ‘l’报错的核心原因是setOnDragListener()方法要求传入一个View.OnDragListener接口实例作为必填参数,你调用方法时未传入任何参数,因此触发参数缺失异常。
接口参数说明
View.OnDragListener仅包含一个需要实现的onDrag(v: View, event: DragEvent): Boolean方法,三个组成部分的作用如下:
- 第一个参数
v:绑定了当前拖拽监听的View实例,此处就是你定义的dashboardCardView对象 - 第二个参数
event:拖拽事件实体,包含拖拽状态、拖拽携带数据、坐标位置等所有和当前拖拽相关的信息 - 返回值:布尔类型,返回
true表示你已消费当前事件,后续拖拽事件会继续回调到这个监听;返回false表示未消费,后续同批次拖拽事件不会再回调。
完整实现示例
你已有的基础代码:
var dashboard = findViewById<View>(R.id.dashboard)
在后续补充拖拽监听的代码即可:
dashboard.setOnDragListener { v, event -> when (event.action) { // 拖拽动作初始化完成,开始进入拖拽流程 DragEvent.ACTION_DRAG_STARTED -> { // 可在此处添加拖拽开始的视觉提示,比如给目标View加高亮边框 true } // 拖拽触点进入当前绑定View的范围 DragEvent.ACTION_DRAG_ENTERED -> { // 可调整View状态提示用户可释放在此区域,比如设置半透明 true } // 拖拽触点在当前绑定View范围内移动 DragEvent.ACTION_DRAG_LOCATION -> { // 可在此处获取触点坐标event.x、event.y做位置相关逻辑 true } // 拖拽触点移出当前绑定View的范围 DragEvent.ACTION_DRAG_EXITED -> { // 恢复View的默认状态 true } // 拖拽触点在当前绑定View范围内释放 DragEvent.ACTION_DROP -> { // 核心业务逻辑实现区域,可通过event.clipData获取拖拽开始时传入的自定义数据 true } // 整次拖拽流程全部结束 DragEvent.ACTION_DRAG_ENDED -> { // 清除所有拖拽过程中设置的临时状态 true } // 未匹配到的事件直接返回false不消费 else -> false } }
以上写法使用了Kotlin的SAM转换语法,无需手动编写匿名内部类即可直接实现接口。
内容的提问来源于stack exchange,提问作者Buddy
相关产品推荐
相关产品推荐

