public
static
void
addEventMethod(Method method,
Annotation annotation,
Object value,
Object handler,
ViewFinder finder){
try
{
View view = finder.findViewByInfo(value);
if
(view!=
null
){
BaseEvent baseEvent = annotation.annotationType().getAnnotation(BaseEvent.
class
);
Class<!--?--> listenerType = baseEvent.listenerType();
String listenerSetter = baseEvent.listenerSetter();
String methodName = baseEvent.methodName();
Object listener = listenerCache.get(value, listenerType);
boolean
addMethod =
false
;
DynamicHandler dymicHandler =
null
;
if
(listener!=
null
){
dymicHandler = (DynamicHandler) Proxy.getInvocationHandler(listener);
addMethod = (handler.equals(dymicHandler.getHandler()));
if
(addMethod){
dymicHandler.addMethod(methodName, method);
}
}
if
(!addMethod){
dymicHandler =
new
DynamicHandler(handler);
dymicHandler.addMethod(methodName, method);
listener = Proxy.newProxyInstance(listenerType.getClassLoader(),
new
Class<!--?-->[]{listenerType},dymicHandler);
listenerCache.put(value, listenerType, listener);
}
//setListener
Method setterMethod = view.getClass().getMethod(listenerSetter, listenerType);
setterMethod.invoke(view, listener);
}
}
catch
(Exception e){
LogUtils.e(e.getMessage(),e);
}
}