这是我在操作栏上声明菜单的方式
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.actionbars, menu);
myMenu = menu;
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) {
case R.id.exit:
//add the function to perform here
mPrefs.setUserIsSignIn(false);
Intent intent = new Intent(this, LoginActivity.class);
startActivity(intent);
finish();
return(true);
}
return(super.onOptionsItemSelected(item));
}
并且我想使用if if(不隐藏整个操作栏,只是菜单)从操作栏隐藏/删除菜单,我尝试使用“ 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);
}
这里只需调用invalidateOptionsMenu()
,然后将逻辑移至onCreateOptionsMenu()
,然后在此处更改可见性。
例如
override fun onCreate(savedInstanceState: Bundle?) {
.
.
btn.setOnClickListener {
invalidateOptionsMenu()
}
.
}
和onCreateOptionsMenu()
中>
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.my_menu, menu)
val menuItem = menu!!.findItem(R.id.menuItem)
if (condition) {
menuItem.isVisible = false
} else {
menuItem.isVisible = true
}
}