【问题标题】:How to Hook into Existing Event Listeners如何挂钩到现有的事件监听器
【发布时间】:2016-01-05 06:30:47
【问题描述】:

我目前正在开发由原始开发人员在其现有 Android 应用程序中安装的 Java SDK。现在我需要设置一些事件监听器,例如:

public void registerTouchListener(ScrollView scrollview) {
  scrollview.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
      Log.d("SDK", event.toString());
      return false;
    }
  });
}

问题是传入的滚动视图可能已经有一个注册的监听器,所以我的问题是如何挂钩到现有的监听器或注册第二个监听器?

【问题讨论】:

  • AFAIK,答案是“你什么都不做”,因为听众设置者没有吸气剂。
  • 是的,我注意到了,我仍然需要以某种方式实现我的想法的要点......有什么建议吗?
  • 为他们提供您自己的 API 以提供 ScrollView 侦听器,您自己在其中实现复合模式,以将事件转发给两个侦听器。然后,记录一下这到底是怎么回事,这样开发人员就知道您拥有触摸侦听器的所有权,他们需要调用您的 API 而不是自己调用setOnTouchListener()
  • 是的好主意;我也在考虑编写一个通过反射检查属性的轮询类,例如检查 scrollY 或 sth - 你对此有何看法?
  • 我不知道这是否会奏效,抱歉。

标签: java android


【解决方案1】:

也许太老套了,但是您能否以某种方式在触摸事件到达 Scrollview 之前“窃取”触摸事件,方法是检查触摸将要着陆的坐标以及它是否在您注册的 Scrollview 列表中。然后就好像你没有处理触摸事件一样——这样你就可以在它被传递给触摸事件之前对它进行操作?

【讨论】:

【解决方案2】:

与其提供这样的 API,您能否提供一个 API,该 API 有一个函数可以在事件结束(或开始)时直接调用 onTouch?不太友好,因为它不会出现在初始化部分,但它会更清晰,错误更少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多