Java 在命令上更改NavigationView的内容(如buttonpress)

Java 在命令上更改NavigationView的内容(如buttonpress),java,android,navigationview,Java,Android,Navigationview,因此,我正在尝试向导航抽屉动态添加一些内容。原则上,它是有效的。我可以在我的应用程序中添加内容,并使其显示在导航抽屉中。唯一的问题是,我必须重新启动应用程序才能弹出导航抽屉中的新内容(因为我只能让代码在onCreate方法中工作),这不是期望的行为 这就是我目前在onCreate方法中得到的: NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); Menu menu = navigationVi

因此,我正在尝试向导航抽屉动态添加一些内容。原则上,它是有效的。我可以在我的应用程序中添加内容,并使其显示在导航抽屉中。唯一的问题是,我必须重新启动应用程序才能弹出导航抽屉中的新内容(因为我只能让代码在onCreate方法中工作),这不是期望的行为

这就是我目前在onCreate方法中得到的:

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
Menu menu = navigationView.getMenu();
MenuItem it1 = menu.add(R.id.group1, 1, 2, "TEST DYNAMIC");
非常基本,但它符合我的要求。它会在菜单中添加一个“测试”标题。

我想要的是能够随意访问这段代码,比如当我按下一个按钮时。不幸的是,我自己没能做到这一点。不管它是在MainActivity的方法中,还是在我的其他片段中,但它不应该只在创建MainActivity时运行,这还不够。另外,我可能需要在添加一些东西后重新绘制导航抽屉(我猜是这样),但我也不知道如何做,所以在这方面提供任何帮助都会很好。

我尝试了以下代码

这里的
button
是变量,如果键入
button
,我在其上添加了
onClickListener

编辑::在活动中,您可以这样做

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        Menu menu = navigationView.getMenu();
        SubMenu topChannelMenu = menu.addSubMenu("Category");
        topChannelMenu.add("Menu Name");
        MenuItem mi = menu.getItem(menu.size()-1);
        mi.setTitle(mi.getTitle());
    }
});
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        NavigationView navigationView = (NavigationView) getActivity().findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        Menu menu = navigationView.getMenu();
        SubMenu topChannelMenu = menu.addSubMenu("Category");
        topChannelMenu.add("Menu Name");
        MenuItem mi = menu.getItem(menu.size()-1);
        mi.setTitle(mi.getTitle());
    }
});
编辑::在片段中执行此操作

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        Menu menu = navigationView.getMenu();
        SubMenu topChannelMenu = menu.addSubMenu("Category");
        topChannelMenu.add("Menu Name");
        MenuItem mi = menu.getItem(menu.size()-1);
        mi.setTitle(mi.getTitle());
    }
});
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        NavigationView navigationView = (NavigationView) getActivity().findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        Menu menu = navigationView.getMenu();
        SubMenu topChannelMenu = menu.addSubMenu("Category");
        topChannelMenu.add("Menu Name");
        MenuItem mi = menu.getItem(menu.size()-1);
        mi.setTitle(mi.getTitle());
    }
});
它的工作


这将在上一个菜单的末尾添加菜单。

请看这个答案,这与我所做的几乎相同。我想要的,也是你链接的答案中没有讨论的,是如何在onCreate方法之外访问这些内容,因为我想在应用程序运行时动态添加菜单项,而不仅仅是在应用程序启动时。不过,关于如何在onCreate方法之外使用这些功能,我仍然一无所知。我非常感谢你的努力。你能把它扩展到一个独立的方法吗?这样,我只能在我的主活动上使用它,而不能在我使用的片段上使用它而不是
findViewById(R.id.nav_视图)这确实很好,谢谢。你能把你以前的评论加入到你的答案中,这样我就可以接受了吗?编辑了答案..添加了如何为
活动
片段
添加。