感谢mihail的提示(感谢:) :))使用隐藏的API,我找到了一个解决方案,在分配后获得一个监听器:
android.view.View类有一个嵌套类静态类ListenerInfo,它存储View上的所有侦听器(API 14).在旧版本中,侦听器是android.view.View中的私有字段.
可以使用反射访问该字段.就我而言(API 14),
// get the nested class `android.view.View$ListenerInfo`
Field listenerInfoField = null;
listenerInfoField = Class.forName("android.view.View").getDeclaredField("mListenerInfo");
if (listenerInfoField != null) {
listenerInfoField.setAccessible(true);
}
Object myLiObject = null;
myLiObject = listenerInfoField.get(myViewObj);
// get the field mOnClickListener, that holds the listener and cast it to a listener
Field listenerField = null;
listenerField = Class.forName("android.view.View$ListenerInfo").getDeclaredField("mOnClickListener")
if (listenerField != null && myLiObject != null) {
View.OnClickListener myListener = (View.OnClickListener) listenerField.get(myLiObject);
}
在那段代码之后(我错过了很多try-catch-blocks),myListener对象保存了onClickListener的实例,该实例之前已经匿名声明给了视图.它也适用于任何其他侦听器,只需将“mOnClickListener参数”替换为您在反射中所需的那个并正确投射它.
请注意,即将发布的版本中的代码更改可能会使其不再起作用.