diff --git a/core/java/android/animation/LayoutTransition.java b/core/java/android/animation/LayoutTransition.java index 355b1fcc68ded..f383af93851ed 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 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 8e5aefdff0e86..632ab4acb25e7 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(); } - mOnLayoutChangeListeners.add(listener); + if (!mOnLayoutChangeListeners.contains(listener)) { + mOnLayoutChangeListeners.add(listener); + } } /**