如何在Android中以编程方式隐藏操作栏上的菜单?

时间:2019-12-22 05:14:05

标签: java 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);
   }

2 个答案:

答案 0 :(得分:0)

这里只需调用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);
}

答案 1 :(得分:0)

这将按ID隐藏菜单项:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate( R.menu.main_menu, menu );

    // hide menu item
    menu.findItem( R.id.menu_item_1 ).setVisible( false );
    return true;
}

您可以将其应用于:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if( item.getItemId() == R.id.menu_item_1 ) {
        item.setVisible( false );
    }
}