【问题标题】:What calls the Android View.OnClickListener API methods?什么调用 Android View.OnClickListener API 方法?
【发布时间】:2018-06-16 23:58:47
【问题描述】:
【问题讨论】:
标签:
java
android
oop
onclicklistener
【解决方案1】:
您对接口的困惑可能比您想象的要少得多。
Android的视图框架、经典的Java Swing、JavaFX、Eclipse SWT等GUI框架基本上都是大而复杂的1。但它们都是通过“颠倒”应用程序来工作的。框架控制一切,而不是您的应用程序代码控制一切。您的应用程序注册了一堆侦听器或“回调”。然后它将控制权移交给框架,并等待被回调以执行某些操作。
GUI 框架将有一个主“事件线程”,它读取来自设备的低级事件流(鼠标的点击和移动,或触摸屏事件、键盘上的按键和释放等)。对于每一个,它将低级别事件映射到应用程序的适当部分,然后调用您的应用程序来说明发生了什么事。
假设一个 Android 用户在屏幕上点击她的手指。该框架会将触摸屏事件的物理屏幕位置转换为应用程序某些“组件”的虚拟屏幕位置。如果该组件是一个按钮,并且您(之前)为该按钮注册了一个 OnClickListener,那么框架会找到该按钮,并调用侦听器的 onclick() 方法来告诉您的应用程序“this 按钮刚刚被点击”。
这一切都相当简单和优雅......以及良好的 OOP 声音。但是您的代码和框架之间的关系与您所期望的完全相反。
1 - 对于大多数人来说太复杂了,无法完全理解。虽然事实上,您不需要完全理解它们来使用它们。
【解决方案2】:
这些方法由 Android 框架本身调用。这是框架代表您执行的有用操作之一,因此您无需解释原始用户手指输入并弄清楚什么构成“点击”!
来自https://developer.android.com/guide/topics/ui/ui-events(我的重点):
在您将用于组成布局的各种 View 类中,您可能会注意到一些看起来对 UI 事件有用的公共回调方法。 当相应的操作发生在该对象上时,Android 框架会调用这些方法。
对于onClick,同一个页面说:
当用户触摸项目(处于触摸模式时)或使用导航键或轨迹球关注项目并按下合适的“输入”键或按下轨迹球时调用。