web-dev-qa-db-ja.com

ポップアップメニューからアイテムを隠す

ポップアップメニューを作成しました。特定のアイテムを条件に応じてポップアップメニューから非表示にする必要があります。以下のコードを試してみましたが、機能せず、"アプリが予期せず停止しました"と表示されます。 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;

    }
27

アイテムを取得する前に、PopupMenuからMenuオブジェクトを取得する必要があります。だからそれは次のようなものになるでしょう

_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);
_

そして、あなたがpopup.show()を呼び出す前にこれを行います

42
tim

この答えは誰かに役立つかもしれません、

以下を使用しました

popupMenu.getMenu().findItem(R.id.next).setVisible(true);

メニューのテキストを変更したい場合は、以下のコードを使用できます。

popupMenu.getMenu().findItem(R.id.next).setTitle("After");
26
Thirumalvalavan