diff options
| -rw-r--r-- | core/java/android/widget/ListPopupWindow.java | 1 | ||||
| -rw-r--r-- | core/java/com/android/internal/view/menu/MenuPopupHelper.java | 22 |
2 files changed, 15 insertions, 8 deletions
diff --git a/core/java/android/widget/ListPopupWindow.java b/core/java/android/widget/ListPopupWindow.java index 881149231095..560fc6801c12 100644 --- a/core/java/android/widget/ListPopupWindow.java +++ b/core/java/android/widget/ListPopupWindow.java @@ -604,6 +604,7 @@ public class ListPopupWindow { removePromptView(); mPopup.setContentView(null); mDropDownList = null; + mHandler.removeCallbacks(mResizePopupRunnable); } /** diff --git a/core/java/com/android/internal/view/menu/MenuPopupHelper.java b/core/java/com/android/internal/view/menu/MenuPopupHelper.java index 1f93eacf459b..6c9e7bb02dd9 100644 --- a/core/java/com/android/internal/view/menu/MenuPopupHelper.java +++ b/core/java/com/android/internal/view/menu/MenuPopupHelper.java @@ -101,8 +101,10 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On } if (anchor != null) { - mTreeObserver = anchor.getViewTreeObserver(); - mTreeObserver.addOnGlobalLayoutListener(this); + if (mTreeObserver == null) { + mTreeObserver = anchor.getViewTreeObserver(); + mTreeObserver.addOnGlobalLayoutListener(this); + } mPopup.setAnchorView(anchor); } else { return false; @@ -123,10 +125,10 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On public void onDismiss() { mPopup = null; - if (mTreeObserver != null) { - mTreeObserver.removeGlobalOnLayoutListener(MenuPopupHelper.this); - mTreeObserver = null; + if (mTreeObserver != null && mTreeObserver.isAlive()) { + mTreeObserver.removeGlobalOnLayoutListener(this); } + mTreeObserver = null; } public boolean isShowing() { @@ -134,6 +136,8 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On } public void onItemClick(AdapterView<?> parent, View view, int position, long id) { + if (!isShowing()) return; + MenuItem item = null; if (mOverflowOnly) { item = mMenu.getOverflowItem(position); @@ -184,13 +188,15 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On @Override public void onGlobalLayout() { if (!isShowing()) { - mTreeObserver.removeGlobalOnLayoutListener(this); + if (mTreeObserver.isAlive()) { + mTreeObserver.removeGlobalOnLayoutListener(this); + } mTreeObserver = null; } else { final View anchor = mAnchorView != null ? mAnchorView.get() : null; - if (anchor != null && !anchor.isShown()) { + if (anchor == null || !anchor.isShown()) { dismiss(); - } else { + } else if (isShowing()) { // Recompute window size and position mPopup.show(); } |