diff options
| -rw-r--r-- | core/java/android/animation/LayoutTransition.java | 12 | ||||
| -rw-r--r-- | core/java/android/view/View.java | 4 |
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); + } } /** |