首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cast类到SensorEventListener

cast类到SensorEventListener
EN

Stack Overflow用户
提问于 2014-07-06 08:04:34
回答 1查看 210关注 0票数 0

我正在尝试注册SensorEventListener,但我的侦听器输入错误。

以下是我尝试过的:

代码语言:javascript
复制
;; listener
(gen-class
:name com.spython.pushupcounter.main.sensor-listener
:implements [android.hardware.SensorEventListener]
:prefix "-"
:methods [[onAccuracyChanged [android.hardware.Sensor Integer] void]
                    [onSensorChanged [android.hardware.SensorEvent] void]])

(def listener com.spython.pushupcounter.main.sensor-listener)
(.registerListener sensor-manager listener proximitySensor 2)

看来我得把listener投给SensorEventListener了,对吧?

我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-07 02:40:20

与类名匹配的符号,如com.spython.pushupcounter.main.sensor-listener解析为java.lang.Class实例。所以你的listener是一个Class,这不是你想要的。它应该是com.spython.pushupcounter.main.sensor-listener的一个实例。可以使用标准实例化语法(com.spython.pushupcounter.main.sensor-listener.)来创建实例--请注意.new的末尾语法糖。但是即使你修复了这个问题,代码也不能工作。用这种方式使用(gen-class)是很棘手的。它只在使用AOT编译时生成类,而不使用AOT编译。您还必须为SensorEventListener方法提供实现。

更好的方法是使用(reify),它返回实现所需接口的对象。例如:

代码语言:javascript
复制
(defn listener []
  (reify
    android.hardware.SensorEventListener
    (onAccuracyChanged [_ sensor accuracy] 
      (comment onAccuracyChanged implementation here))
    (onSensorChanged [_ event]
      (comment onSensorChanged implementation here))))

(.registerListener sensor-manager (listener) proximitySensor 2)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24593886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档