首页 > 解决方案 > 根据 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;
}

这两种方法都不起作用,因为共享偏好值没有得到

标签: androidsharedpreferencesnavigation-drawer

解决方案


我认为您正在尝试在 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);
}

推荐阅读