summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/widget/ListPopupWindow.java1
-rw-r--r--core/java/com/android/internal/view/menu/MenuPopupHelper.java22
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();
}