首页 > 解决方案 > 如何以编程方式隐藏 Android 操作栏上的菜单?

问题描述

这就是我在操作栏上声明菜单的方式:

public void checkUserType() {
   if (mPrefs.getUserType().equalsIgnoreCase("mahasiswa")) {
      requestData(String.valueOf(mPrefs.getUserID()));
   } else if (mPrefs.getUserType().equalsIgnoreCase("dosen")) {
      requestData(String.valueOf(mPrefs.getSelectedUserId()));
      getSupportActionBar().hide();
      myMenu.findItem(R.id.exit).setVisible(false);
   }

我想使用 if-else 隐藏/删除操作栏中的菜单(不隐藏整个操作栏,只是隐藏菜单)。我试过使用“myMenu.findItem(R.id.exit).setVisible(false);” 但它在空对象引用上发生错误

这是我的代码:

public void checkUserType() {
   if (mPrefs.getUserType().equalsIgnoreCase("mahasiswa")) {
      requestData(String.valueOf(mPrefs.getUserID()));
   } else if (mPrefs.getUserType().equalsIgnoreCase("dosen")) {
      requestData(String.valueOf(mPrefs.getSelectedUserId()));
      getSupportActionBar().hide();
      myMenu.findItem(R.id.exit).setVisible(false);
   }

标签: javaandroid

解决方案


在这里只需调用invalidateOptionsMenu()并将您的逻辑移动到onCreateOptionsMenu()那里并更改可见性。

例如

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    .
    .
    btn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            invalidateOptionsMenu();
        }
    });
}

并且在onCreateOptionsMenu()

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main_menu, menu);
    menu.findItem(R.id.menu_item).setVisible(condition);
}

推荐阅读