这是我在操作栏上声明菜单的方式:
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);
}
答案 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 );
}
}