Android (java):根据用户是否登录更新底部导航项
Android (java): Update bottom navigation items depending on whether user is signed in or not
我有一个包含 5 个项目的底部导航。根据用户是否登录,只有 4 个项目可见(项目 4 仅在用户登录时显示,项目 5 仅在用户未登录时显示)。
在 MainActivity 中,我创建了从 SignInFragment 调用的 updateBottomNavigation() 函数:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Set up the toolbar
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// Set up the navController
FragmentManager supportFragmentManager = getSupportFragmentManager();
NavHostFragment navHostFragment = (NavHostFragment) supportFragmentManager.findFragmentById(R.id.nav_host_fragment);
navController = navHostFragment.getNavController();
// Set up the app bar
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(R.id.homeFragment, R.id.libraryFragment, R.id.searchFragment, R.id.myStuffFragment, R.id.promptFragment).build();
NavigationUI.setupWithNavController(toolbar, navController, appBarConfiguration);
// Connect bottom navigation
bottomNav = findViewById(R.id.bottom_nav);
NavigationUI.setupWithNavController(bottomNav, navController);
});
public void updateBottomNavigation(String userType) {
if (userType.equals("subscriber")) {
if (bottomNav.getMenu().findItem(R.id.promptFragment) != null) {
bottomNav.getMenu().removeItem(R.id.promptFragment);
}
} else if (userType.equals("visitor")) {
if (bottomNav.getMenu().findItem(R.id.myStuffFragment) != null) {
bottomNav.getMenu().removeItem(R.id.myStuffFragment);
}
}
}
应用程序首次加载时,MyStuff 项不会出现。但是,当用户登录时,Prompt 项消失了,但 My Stuff 项不会重新出现,因为它在一开始就已经被删除了。
有没有办法刷新底部导航,使其在调用 updateBottomNavigation() 方法之前从头开始加载?或者不删除菜单项而是隐藏它以便在需要时可以使其可见的方法?
您可以切换菜单项的可见性:
MenuItem promptItem = bottomNav.getMenu().findItem(R.id.promptFragment);
MenuItem myStuffItem = bottomNav.getMenu().findItem(R.id.myStuffFragment);
if (userType.equals("subscriber")) {
if ( promptItem != null) {
promptItem.setVisibility(VIEW.GONE);
}
if ( myStuffItem != null) {
myStuffItem .setVisibility(VIEW.VISIBLE);
}
} else if (userType.equals("visitor")) {
if ( myStuffItem != null) {
myStuffItem .setVisibility(VIEW.GONE);
}
}
我有一个包含 5 个项目的底部导航。根据用户是否登录,只有 4 个项目可见(项目 4 仅在用户登录时显示,项目 5 仅在用户未登录时显示)。
在 MainActivity 中,我创建了从 SignInFragment 调用的 updateBottomNavigation() 函数:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Set up the toolbar
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// Set up the navController
FragmentManager supportFragmentManager = getSupportFragmentManager();
NavHostFragment navHostFragment = (NavHostFragment) supportFragmentManager.findFragmentById(R.id.nav_host_fragment);
navController = navHostFragment.getNavController();
// Set up the app bar
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(R.id.homeFragment, R.id.libraryFragment, R.id.searchFragment, R.id.myStuffFragment, R.id.promptFragment).build();
NavigationUI.setupWithNavController(toolbar, navController, appBarConfiguration);
// Connect bottom navigation
bottomNav = findViewById(R.id.bottom_nav);
NavigationUI.setupWithNavController(bottomNav, navController);
});
public void updateBottomNavigation(String userType) {
if (userType.equals("subscriber")) {
if (bottomNav.getMenu().findItem(R.id.promptFragment) != null) {
bottomNav.getMenu().removeItem(R.id.promptFragment);
}
} else if (userType.equals("visitor")) {
if (bottomNav.getMenu().findItem(R.id.myStuffFragment) != null) {
bottomNav.getMenu().removeItem(R.id.myStuffFragment);
}
}
}
应用程序首次加载时,MyStuff 项不会出现。但是,当用户登录时,Prompt 项消失了,但 My Stuff 项不会重新出现,因为它在一开始就已经被删除了。
有没有办法刷新底部导航,使其在调用 updateBottomNavigation() 方法之前从头开始加载?或者不删除菜单项而是隐藏它以便在需要时可以使其可见的方法?
您可以切换菜单项的可见性:
MenuItem promptItem = bottomNav.getMenu().findItem(R.id.promptFragment);
MenuItem myStuffItem = bottomNav.getMenu().findItem(R.id.myStuffFragment);
if (userType.equals("subscriber")) {
if ( promptItem != null) {
promptItem.setVisibility(VIEW.GONE);
}
if ( myStuffItem != null) {
myStuffItem .setVisibility(VIEW.VISIBLE);
}
} else if (userType.equals("visitor")) {
if ( myStuffItem != null) {
myStuffItem .setVisibility(VIEW.GONE);
}
}