injecting click event to a view in android
public static void injectClickEvent(MainMenuParentViewHolder viewHolder, final View.OnClickListener listener) {
try {
final View.OnClickListener clickListener = (View.OnClickListener) viewHolder.itemView.getTag();
if (clickListener == null) {
viewHolder.itemView.setTag(getClickListener(viewHolder.itemView));
}
viewHolder.itemView.setOnClickListener(listener);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
public static View.OnClickListener getClickListener(View view) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
// 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(view);
// 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);
return myListener;
}
return null;
}