OSDN Git Service

Fix bug 3387855 - Menu flashes on left side of screen
authorAdam Powell <adamp@google.com>
Tue, 25 Jan 2011 22:39:02 +0000 (14:39 -0800)
committerAdam Powell <adamp@google.com>
Tue, 25 Jan 2011 22:40:36 +0000 (14:40 -0800)
Post popup menu click events rather than executing inline so that the
popup can close undisturbed.

Change-Id: I01481bd37d7921c10c6b8b484eab33f0d25447ff

core/java/com/android/internal/view/menu/MenuPopupHelper.java

index b93fac4..1f93eac 100644 (file)
@@ -19,6 +19,7 @@ package com.android.internal.view.menu;
 import com.android.internal.view.menu.MenuBuilder.MenuAdapter;
 
 import android.content.Context;
+import android.os.Handler;
 import android.util.DisplayMetrics;
 import android.view.KeyEvent;
 import android.view.MenuItem;
@@ -46,6 +47,8 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On
     private boolean mOverflowOnly;
     private ViewTreeObserver mTreeObserver;
 
+    private final Handler mHandler = new Handler();
+
     public MenuPopupHelper(Context context, MenuBuilder menu) {
         this(context, menu, null, false);
     }
@@ -137,8 +140,14 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On
         } else {
             item = mMenu.getVisibleItems().get(position);
         }
-        mMenu.performItemAction(item, 0);
         dismiss();
+
+        final MenuItem performItem = item;
+        mHandler.post(new Runnable() {
+            public void run() {
+                mMenu.performItemAction(performItem, 0);
+            }
+        });
     }
 
     public boolean onKey(View v, int keyCode, KeyEvent event) {