summaryrefslogtreecommitdiff
path: root/extensions/baseAdapters/src/main/java/android/databinding/adapters/ListenerUtil.java
diff options
context:
space:
mode:
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.java27
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();
+ }
+ }
+ }
+ }
}