我需要在给定条件下从弹出菜单中隐藏/显示特定项目

Ujj*_*har 2 java android

我试过这个解决方案,但它没有按我预期的那样工作。
这是我的代码,这是我尝试过的。

PopupMenu popup = new PopupMenu(TableActivity.this, view);
              popup.setOnMenuItemClickListener(TableActivity.this);
              menu = popup.getMenu();
              popup.inflate(R.menu.popup_shift);
              popup.show();
              popup.setOnMenuItemClickListener(this);

    @Override
     public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.menu_merge:
                    if(tableDbList.get(positionShift).getMergeTableId()== 0) {     
                      //this is the condition to show/hide popup menuitem  
                         popup.getMenu().findItem(R.id.menu_merge).setVisible(false);
                    }else {   
                    checkPinCode.checkPinCodemethod(TableActivity.this,   "mergeCancel");
                    }
         }
     return true;
    }
Run Code Online (Sandbox Code Playgroud)

ADM*_*ADM 7

您正在尝试改变visibilityMenuItem点击。它会工作,但popupMenu会在单击后关闭。所以这没有任何意义。如果您的要求是在某些条件下显示项目,则应在 之前设置可见性show()。下面是一个简单的例子。

  private void showPopup() {
    final PopupMenu popup = new PopupMenu(MainActivity.this, view);
    popup.getMenuInflater().inflate(R.menu.popup_shift, popup.getMenu());
    if(someCondition){
        popup.getMenu().findItem(R.id.menu_merge).setVisible(false);
    }
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        public boolean onMenuItemClick(MenuItem item) {
            Toast.makeText(MainActivity.this, "You Clicked : " + item.getTitle(), Toast.LENGTH_SHORT).show();
            return true;
        }
    });
    popup.show();
}
Run Code Online (Sandbox Code Playgroud)