根据 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);
}