diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 54c805fc79844..e83b9b5a53a7f 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -1775,6 +1775,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility private CheckForLongPress mPendingCheckForLongPress; private CheckForTap mPendingCheckForTap = null; + private PerformClick mPerformClick; private UnsetPressedState mUnsetPressedState; @@ -4330,7 +4331,15 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility // Only perform take click actions if we were in the pressed state if (!focusTaken) { - performClick(); + // Use a Runnable and post this rather than calling + // performClick directly. This lets other visual state + // of the view update before click actions start. + if (mPerformClick == null) { + mPerformClick = new PerformClick(); + } + if (!post(mPerformClick)) { + performClick(); + } } } @@ -8965,6 +8974,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility } } + private final class PerformClick implements Runnable { + public void run() { + performClick(); + } + } + /** * Interface definition for a callback to be invoked when a key event is * dispatched to this view. The callback will be invoked before the key