【问题标题】:Add a navigation top level destinations in runtime在运行时添加导航顶级目的地
【发布时间】:2020-04-17 15:20:49
【问题描述】:

我知道如何为导航图制作多个顶级目的地。遵循here 的答案就可以了。

但是,我想根据应用用户的愿望(例如单击按钮)添加另一个顶级目的地。

符合the documentation

//Redoing the navigation setup
int[] itemsId = new int[ menu.size() ];
for( int i = 0; i < menu.size(); i++ ) {
    itemsId[i] = menu.getItem(i).getItemId();        
}
mAppBarConfiguration = new AppBarConfiguration.Builder( itemsId )
    .setDrawerLayout(drawer)
    .build();
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);

这段代码已经在 MainActivity.java 文件的 onCreate() 中。 然后在我添加一个 menuItem 之后,我再次运行代码。

导航后,新添加的 menuItem 仍然在左上角显示返回按钮,而不是汉堡堆栈按钮。

我想要的可能吗? 有什么想法吗?

P.S : 我正在使用 Android 的基本项目模板“Navigation Drawer Activity”(当你想开始一个新项目时)。

【问题讨论】:

    标签: android navigation-drawer android-navigation


    【解决方案1】:

    实际上,只要菜单项 id 与 mobile_navigation 元素中片段的 id 匹配,它就可以工作。 (可以有一个未分配给菜单项的片段,然后添加菜单项)。 我的错误是我像这样动态添加菜单项:

    int idOfNewMenuItem = View.generateViewId();
    final MenuItem createdMenuItem = menu.add( R.id.main_drawer_group, idOfNewMenuItem, 0, userInputText);
    

    然后我正在导航到一个有自己 id 的片段

    navController.navigate( R.id.nav_activefragment );
    

    所以必须做的是

    final MenuItem createdMenuItem = menu.add( R.id.main_drawer_group, R.id.nav_activefragment, 0, userInputText);
    navController.navigate( R.id.nav_activefragment );
    

    然后我必须再次插入问题中的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多