diff options
Diffstat (limited to 'extensions/baseAdapters/src/main/java/android/databinding/adapters/ListenerUtil.java')
-rw-r--r-- | extensions/baseAdapters/src/main/java/android/databinding/adapters/ListenerUtil.java | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/extensions/baseAdapters/src/main/java/android/databinding/adapters/ListenerUtil.java b/extensions/baseAdapters/src/main/java/android/databinding/adapters/ListenerUtil.java index 67ae1727..6869cdba 100644 --- a/extensions/baseAdapters/src/main/java/android/databinding/adapters/ListenerUtil.java +++ b/extensions/baseAdapters/src/main/java/android/databinding/adapters/ListenerUtil.java @@ -79,4 +79,31 @@ public class ListenerUtil { } } + /** + * Returns the previous value for a listener if one was stored previously with + * {@link #trackListener(View, Object, int)} + * @param view The View to check for a listener previously stored with + * {@link #trackListener(View, Object, int)} + * @param listenerResourceId A unique resource ID associated with the listener type. + * @return The previously tracked listener. This will be null if the View did not have + * a previously-tracked listener. + */ + public static <T> T getListener(View view, int listenerResourceId) { + if (VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH) { + return (T) view.getTag(listenerResourceId); + } else { + synchronized (sListeners) { + WeakHashMap<View, WeakReference<?>> listeners = sListeners.get(listenerResourceId); + if (listeners == null) { + return null; + } + final WeakReference<T> oldValue = (WeakReference<T>) listeners.get(view); + if (oldValue == null) { + return null; + } else { + return oldValue.get(); + } + } + } + } } |