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

时间:2018-04-29 07:34:14

标签: java android

我尝试了this solution,但它没有按照我的预期运作。
这是我的代码,这就是我尝试过的。

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;
    }

1 个答案:

答案 0 :(得分:0)

您正尝试更改visibility点击MenuItem。它会起作用,但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();
}