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