Merge "Fix some bugs with MenuPopupHelper and ListPopupWindow"

This commit is contained in:
Adam Powell
2011-02-15 11:16:01 -08:00
committed by Android (Google) Code Review
2 changed files with 15 additions and 8 deletions

View File

@@ -604,6 +604,7 @@ public class ListPopupWindow {
removePromptView();
mPopup.setContentView(null);
mDropDownList = null;
mHandler.removeCallbacks(mResizePopupRunnable);
}
/**

View File

@@ -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();
}