@Override
 public void onSubUiVisibilityChanged(boolean isVisible) {
   if (isVisible) {
     // Not a submenu, but treat it like one.
     super.onSubMenuSelected(null);
   } else {
     mMenu.close(false);
   }
 }
  /**
   * Display the overflow menu if one is present.
   *
   * @return true if the overflow menu was shown, false otherwise.
   */
  public boolean showOverflowMenu() {
    if (mReserveOverflow
        && !isOverflowMenuShowing()
        && mMenu != null
        && mMenuView != null
        && mPostedOpenRunnable == null
        && !mMenu.getNonActionItems().isEmpty()) {
      OverflowPopup popup = new OverflowPopup(mContext, mMenu, mOverflowButton, true);
      mPostedOpenRunnable = new OpenOverflowRunnable(popup);
      // Post this for later; we might still need a layout for the anchor to be right.
      ((View) mMenuView).post(mPostedOpenRunnable);

      // ActionMenuPresenter uses null as a callback argument here
      // to indicate overflow is opening.
      super.onSubMenuSelected(null);

      return true;
    }
    return false;
  }
  public boolean onSubMenuSelected(SubMenuBuilder subMenu) {
    if (!subMenu.hasVisibleItems()) return false;

    SubMenuBuilder topSubMenu = subMenu;
    while (topSubMenu.getParentMenu() != mMenu) {
      topSubMenu = (SubMenuBuilder) topSubMenu.getParentMenu();
    }
    View anchor = findViewForItem(topSubMenu.getItem());
    if (anchor == null) {
      if (mOverflowButton == null) return false;
      anchor = mOverflowButton;
    }

    mOpenSubMenuId = subMenu.getItem().getItemId();
    mActionButtonPopup = new ActionButtonSubmenu(mContext, subMenu);
    mActionButtonPopup.setAnchorView(anchor);
    mActionButtonPopup.show();
    super.onSubMenuSelected(subMenu);
    return true;
  }