【问题标题】:android NavigationView submenus aren't added if there are some items如果有某些项目,则不添加 android NavigationView 子菜单
【发布时间】:2015-05-30 20:31:39
【问题描述】:

嗯,我喜欢 NavigationView 的想法,但在以编程方式添加菜单项和子菜单方面体验不佳

protected void inflateMenu(Menu menu){
    menu.addSubMenu(1, 2, 0, "Heading");
    menu.add(MAIN_GROUP_ID, 0, 0, "Something 2");
    menu.add(MAIN_GROUP_ID, 1, 0, "Title");

    menu.addSubMenu(1, 2, 0, "Sub Menu");
    menu.add(1, 3, 0, "Menu #1");

}

子菜单没有出现在 NavigationView 上,但是如果我仍然只是添加没有任何项目的子菜单,它们就会出现在屏幕上,所以问题来了,如何解决这个问题?

【问题讨论】:

    标签: android


    【解决方案1】:

    此问题已在支持库的 v23.0.0 中得到修复,因此请不要忘记在更新后立即删除解决方法。

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题并解决如下: 您可以通过删除一项来通知 NavigationView 数据已更改。

      首先添加一个项目然后删除它对我来说是诀窍。 添加菜单后调用以下行:

      mNavigationView.getMenu().removeItem(mNavigationView.getMenu().add("").getItemId());
      

      虽然不好但是解决了问题。

      【讨论】:

      • 不幸的是,这对我不起作用,因为“虚拟”项目没有被视觉删除(支持 lib v22.2.1)
      【解决方案3】:

      好吧,我找到了解决方案,我们只需要访问NavigationMenuPresenter#updateMenuView(boolean),然后在人口菜单后立即调用它

      /**
       * Tricky {@link NavigationView} doesn't allow create dynamic
       * menu, be clearly adding menu items on the fly doesn't updates
       * Menu Adapter in {@link NavigationView} so, to we should update
       * it manually view {@link NavigationMenuPresenter#updateMenuView(boolean)}
       *
       * Returns {@link NavigationMenuPresenter} instance from {@link NavigationView}
       */
      static NavigationMenuPresenter getNavigationMenuPresenter(NavigationView view){
          try {
              Field presenterField = NavigationView.class.getDeclaredField("mPresenter");
              presenterField.setAccessible(true);
              return (NavigationMenuPresenter) presenterField.get(view);
          } catch (NoSuchFieldException e) {
              e.printStackTrace();
          } catch (IllegalAccessException e) {
              e.printStackTrace();
          }
          return null;
      }
      

      【讨论】:

      • 与通过反射访问的任何内部方法一样,这可能会在包的未来版本中中断。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 2011-07-22
      相关资源
      最近更新 更多