从弹出菜单中隐藏项目

Sel*_*och 27 android popupmenu

我创建了一个弹出菜单.我需要在条件下隐藏弹出菜单中的特定项目,我尝试了下面的代码,但它不起作用并显示"意外地你的应用程序已被停止".我用过findViewByIdsetEnabled(false).

有没有其他方法可以隐藏弹出菜单中的项目?请帮忙.

    @Override
public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch(item.getItemId()){
        case R.id.addMessage_Action:
            AddMessage();
            break;
        case R.id.dropMenuAction:
            menuItemView = findViewById(R.id.dropMenuAction);
            PopupMenu popup = new PopupMenu(this, menuItemView);
            MenuInflater inflater = popup.getMenuInflater();
            inflater.inflate(R.menu.popupmenu_for_message_delete, popup.getMenu());
            popup.show();
            popup.setOnMenuItemClickListener(this);
            if(Global.lock == true)
                findViewById(R.id.lock_message).setEnabled(false);
            else
                findViewById(R.id.unlock_message).setEnabled(false);

            break;
        }
        return false;

    }
Run Code Online (Sandbox Code Playgroud)

tim*_*tim 43

Menu在获得项目之前,您需要从PopupMenu 获取Object.所以它就像是

Menu popupMenu = popup.getMenu();
if(Global.lock == true)
    popupMenu.findItem(R.id.lock_message).setEnabled(false);
else 
    popupMenu.findItem(R.id.unlock_message).setEnabled(false);
Run Code Online (Sandbox Code Playgroud)

在你打电话之前我会这样做 popup.show()

  • ``getItem``需要索引作为争论而``findItem``需要id.所以这个例子应该像``popupMenu.findItem(R.id.lock_message).setEnabled(false);`` (3认同)
  • `popupMenu.findItem(R.id.lock_message).setVisible(false);`将会解决.:) (3认同)

Thi*_*van 31

这个答案可能对某人有帮助,

我在下面用过

popupMenu.getMenu().findItem(R.id.next).setVisible(true);
Run Code Online (Sandbox Code Playgroud)

如果要更改菜单文本,可以使用以下代码,

popupMenu.getMenu().findItem(R.id.next).setTitle("After");
Run Code Online (Sandbox Code Playgroud)