如何以编程方式而不是菜单xml将子菜单项添加到NavigationView [英] How to add submenu items to NavigationView programmatically instead of menu xml

查看:102
本文介绍了如何以编程方式而不是菜单xml将子菜单项添加到NavigationView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试以编程方式将submenu项添加到NavigationView.我可以将项目添加到menu,但不能添加到submenu

将项目添加到菜单中

Menu menu = mNavigationView.getMenu();
menu.add(Menu.NONE, Menu.NONE, index, "Menu Item1");

但是将项目添加到子菜单不起作用

Menu menu = mNavigationView.getMenu();
SubMenu subMenu = menu.addSubMenu("Sub menu title");
subMenu.add(Menu.NONE, Menu.NONE, index, "SubMenu Item1");

解决方案

调用Adapter上的rel ="noreferrer"> BaseAdapter.notifyDataSetChanged .您可以使用反射来抓取ListView或仅在 NavigationView 个孩子,直到到达为止.

这不是最新的代码,据我所知,fas尚未将最新的更改推送到支​​持库,但实际上是

结果

I'm trying to add submenu items to NavigationView programmatically . I'm able to add items into menu but not into submenu

Adding items to menu works

Menu menu = mNavigationView.getMenu();
menu.add(Menu.NONE, Menu.NONE, index, "Menu Item1");

But adding items to sub menu doesn't work

Menu menu = mNavigationView.getMenu();
SubMenu subMenu = menu.addSubMenu("Sub menu title");
subMenu.add(Menu.NONE, Menu.NONE, index, "SubMenu Item1");

解决方案

The trick to call BaseAdapter.notifyDataSetChanged on the underlying Adapter that contains the menu items. You could use reflection to grab the ListView or just loop over the NavigationView children until you reach it.

This isn't the most up-to-date code, as fas as I know Google hasn't pushed the most recent changes to the Support Library, but essentially NavigationMenuPresenter.prepareMenuItems is called when you call BaseAdpater.notifyDataSetChanged.

But if you want to see the most recent source, you can download it through the SDK Manager. Choose Sources for Android MNC. Then navigate to

yourAndroidSDK/sources/android-MNC/android/support/design/internal/NavigationMenuPresenter.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    final Menu menu = mNavigationView.getMenu();
    for (int i = 0; i < 4; i++) {
        menu.add("Menu Item " + (i + 1));
    }
    final SubMenu subMenu = menu.addSubMenu("SubMenu Title");
    for (int i = 0; i < 2; i++) {
        subMenu.add("SubMenu Item " + (i + 1));
    }
    for (int i = 0, count = mNavigationView.getChildCount(); i < count; i++) {
        final View child = mNavigationView.getChildAt(i);
        if (child != null && child instanceof ListView) {
            final ListView menuView = (ListView) child;
            final HeaderViewListAdapter adapter = (HeaderViewListAdapter) menuView.getAdapter();
            final BaseAdapter wrapped = (BaseAdapter) adapter.getWrappedAdapter();
            wrapped.notifyDataSetChanged();
        }
    }

}

Results

这篇关于如何以编程方式而不是菜单xml将子菜单项添加到NavigationView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆