我正在关注SO的this回答,标题为:
在用户登录时更改NavigationView项目
代码工作正常但重启应用时NavigationView
的内容发生了变化。我希望在单击Login或LogOut item menus
这是我在onCreate()
方法中的代码:
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
if(islogin())
{
navigationView.getMenu().clear();
navigationView.inflateMenu(R.menu.activity_main_drawer1);
} else
{
navigationView.getMenu().clear();
navigationView.inflateMenu(R.menu.activity_main_drawer2);
}
navigationView.setNavigationItemSelectedListener(this);
toggle.syncState();
这是islogin()
方法:
public boolean islogin(){
// Retrieve data from preference:
prefs = getSharedPreferences("UserLoginData", MODE_PRIVATE);
String username = prefs.getString("username", null);
if (username == null) {
return false;
}
else{
return true;
}
}
任何帮助将非常感谢!谢谢
注意:虽然这个问题似乎与某些问题重复,但它只是标题,内容完全不同。
答案 0 :(得分:0)
虽然我没有得到答案,但我在这里发布我的解决方案。 我确实解决了一个非常简单的逻辑,它的工作非常好。
第1步:
我首先在全球范围内初始化Toolbar toolbar;
。
第2步:
然后我只创建一个名为myDrawer()
的简单方法,并将所有抽屉代码包装在其中。像这样:
public void myDrawer(){
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
if(islogin())
{
navigationView.getMenu().clear();
navigationView.inflateMenu(R.menu.activity_main_drawer2);
} else
{
navigationView.getMenu().clear();
navigationView.inflateMenu(R.menu.activity_main_drawer);
}
navigationView.setNavigationItemSelectedListener(this);
toggle.syncState();
}
现在我已经完成了导航工作,我可以用它做任何事情,比如刷新和再次呼叫等。
第3步:
我在主要活动i-e中调用该方法:OnCreate
myDrawer();
第4步:
我每次做Signin
和SignOut
的逻辑时都会调用它。
哇!它的工作就像一个魅力。
PS:仅出于信息目的,这是我的onNavigationItemSelected
,我可以处理点击事件:
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
Intent intent;
if (id == R.id.nav_item_item1) {
intent = new Intent(MainActivity.this, SomeClass1.class);
startActivity(intent);
} else if (id == R.id.nav_item_item2) {
intent = new Intent(getApplicationContext(), SomeClass2.class);
startActivity(intent);
} else if (id == R.id.nav_item_logout) {
// my other logic for signout
myDrawer();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
<强>现金:强>