summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/animation/LayoutTransition.java12
-rw-r--r--core/java/android/view/View.java4
2 files changed, 11 insertions, 5 deletions
diff --git a/core/java/android/animation/LayoutTransition.java b/core/java/android/animation/LayoutTransition.java
index 355b1fcc68de..f383af93851e 100644
--- a/core/java/android/animation/LayoutTransition.java
+++ b/core/java/android/animation/LayoutTransition.java
@@ -24,6 +24,7 @@ import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
@@ -615,10 +616,13 @@ public class LayoutTransition {
observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
parent.getViewTreeObserver().removeOnPreDrawListener(this);
- int numChildren = parent.getChildCount();
- for (int i = 0; i < numChildren; ++i) {
- final View child = parent.getChildAt(i);
- child.removeOnLayoutChangeListener(layoutChangeListenerMap.get(child));
+ int count = layoutChangeListenerMap.size();
+ if (count > 0) {
+ Collection<View> views = layoutChangeListenerMap.keySet();
+ for (View view : views) {
+ View.OnLayoutChangeListener listener = layoutChangeListenerMap.get(view);
+ view.removeOnLayoutChangeListener(listener);
+ }
}
layoutChangeListenerMap.clear();
return true;
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 8e5aefdff0e8..632ab4acb25e 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -3335,7 +3335,9 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
if (mOnLayoutChangeListeners == null) {
mOnLayoutChangeListeners = new ArrayList<OnLayoutChangeListener>();
}
- mOnLayoutChangeListeners.add(listener);
+ if (!mOnLayoutChangeListeners.contains(listener)) {
+ mOnLayoutChangeListeners.add(listener);
+ }
}
/**