根据 onCreateOptionsMenu 中的共享首选项值更改菜单项可见性
Change menuitems visibility based on a shared preference value inside 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);
}
我需要根据从登录获得的角色从我的导航抽屉中删除一些值。我尝试了两种方法。一种是根据角色值更改菜单,第二种是根据角色值设置可见性。但问题是我无法在 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);
}