导航抽屉刷新
Navigation Drawer Refreshed
我正在关注 SO 上的 答案,标题为:
用户登录时更改 NavigationView 项目
代码工作正常,但 NavigationView
的内容在我重新启动应用程序时发生变化。我希望在点击登录或注销后更改内容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;
}
}
如有任何帮助,我们将不胜感激!谢谢
注意:虽然这个问题看起来有些重复,但只是标题,内容完全不同。
虽然我没有得到答案,但我在这里发布了我的解决方案。
我确实用一个非常简单的逻辑解决了它,而且效果非常好。
第 1 步:
我先在class上面全局初始化Toolbar toolbar;
。
第 2 步:
然后我只创建一个名为:myDrawer()
的简单方法并将我所有的 Drawer 代码包装在其中。像这样:
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 步:
我正在调用 Main Activity 中的方法,即: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;
}
学分:
我正在关注 SO 上的
用户登录时更改 NavigationView 项目
代码工作正常,但 NavigationView
的内容在我重新启动应用程序时发生变化。我希望在点击登录或注销后更改内容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;
}
}
如有任何帮助,我们将不胜感激!谢谢
注意:虽然这个问题看起来有些重复,但只是标题,内容完全不同。
虽然我没有得到答案,但我在这里发布了我的解决方案。 我确实用一个非常简单的逻辑解决了它,而且效果非常好。
第 1 步:
我先在class上面全局初始化Toolbar toolbar;
。
第 2 步:
然后我只创建一个名为:myDrawer()
的简单方法并将我所有的 Drawer 代码包装在其中。像这样:
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 步:
我正在调用 Main Activity 中的方法,即: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;
}
学分: