android - 根据 onCreateOptionsMenu 中的共享首选项值更改菜单项的可见性
问题描述
我需要根据从登录中获取的角色从导航抽屉中删除一些值。我尝试了两种方法。一是根据角色值更改菜单,二是根据角色值设置可见性。但问题是我无法在 onCreateOptionsMenu 中获得共享偏好值。当它在 onCreate 中给出时,值会变好。不知道为什么会这样。我完全陷入了这个问题。
方法一
@Override
public boolean onCreateOptionsMenu(Menu menu) {
SharedPreferences prefs1 = getSharedPreferences("eduplus", Context.MODE_PRIVATE);
String role = prefs1.getString("roleId", null);
Toast.makeText(getApplicationContext(),role,Toast.LENGTH_LONG).show();
assert role != null;
if(role.equals("parent"))
{
getMenuInflater().inflate(R.menu.drawer, menu);
}
else
{
getMenuInflater().inflate(R.menu.drawer1,menu);
}
return true;
}
方法二
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
SharedPreferences prefs1 = getSharedPreferences("eduplus", Context.MODE_PRIVATE);
String role = prefs1.getString("roleId", null);
Log.d("rolevalueval",role);
if (role.equals("student")) {
menu.findItem(R.id.leaverequest).setVisible(false);
}
return true;
}
这两种方法都不起作用,因为共享偏好值没有得到
解决方案
我认为您正在尝试在 NavigationView 中膨胀抽屉菜单。要膨胀它,请在活动中使用以下代码onCreate()
。
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.getMenu().clear();
if(role.equals("parent")){
navigationView.inflateMenu(R.menu.drawer);
}
else
{
navigationView.inflateMenu(R.menu.drawer1);
}
推荐阅读
- django - Django 不明白我在数据库中的字段是否为空
- shell - 如何从 unix 中的 json 文件中提取值?
- excel - Excel - 根据设定条件突出显示行
- python - Python UiPath - 如何在 UiPath.Python.Activities 中使用类
- node.js - Raspberry Pi 断电时更改文本文件
- emscripten - Emscripten 传递 stl c++ map 参数
- javascript - 滑块图像已满时如何制作?反应式
- python - 关于导入 Python 的错误
- react-native - 如何在激活其他组件中的道具后重新渲染已经渲染的组件
- apache-spark - 火花工作卡住的原因可能是什么