Android getOnTouchListener with API version> = 15

I need to know if OnTouchListener mode has been set. The following code works fine under api level 15.

public static boolean isSetOnTouchListener_v8(View v) { try { Class<View> clazz = (Class<View>) Class.forName("android.view.View"); Field f = clazz.getDeclaredField("mOnTouchListener"); f.setAccessible(true); if (f.get(v) == null) { return false; } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return true; } 

Now I need the same method for api level 15 and above.

I tried the following code, but it does not work. Anyone have any suggestions?

 public static boolean isSetOnTouchListener_v15(View v) { try { Object listenerInfo = getListenerInfo(v); if (listenerInfo != null) { Class<? extends Object> clazz = listenerInfo.getClass(); Field f = clazz.getDeclaredField("mOnTouchListener"); f.setAccessible(true); if (f.get(listenerInfo) == null) return false; } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } return true; } private static Object getListenerInfo(View v) { Field f = null; try { f = View.class.getDeclaredField("mListenerInfo"); f.setAccessible(true); return (Object) f.get(v); } catch (Exception e) { return null; } } 
+4
source share

Source: https://habr.com/ru/post/1500833/


All Articles