【问题标题】:Changing content of NavigationView on command (like buttonpress)根据命令更改 NavigationView 的内容(如按钮按下)
【发布时间】:2016-02-24 13:35:11
【问题描述】:

所以我正在尝试动态地将一些内容添加到我的导航抽屉中。原则上,它有效。我可以在我的应用程序中添加东西,我可以让它显示在导航抽屉中。唯一的问题是,我必须重新启动应用程序才能弹出导航抽屉中的新内容(因为我只能让代码在 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 创建时运行,这还不够。另外,我可能需要在添加一些东西后重新绘制导航抽屉(我猜),但我也不知道该怎么做,所以任何帮助都会很棒。

【问题讨论】:

  • 嗯,这和我做的差不多。我想要的东西,以及您链接的答案中没有讨论的是如何在 onCreate 方法之外访问这些东西,因为我想在应用程序运行时动态添加菜单项,而不仅仅是在应用程序启动时。
  • 仍然没有关于如何在 onCreate 方法之外使用这些函数。不过,我确实很感谢您的努力。

标签: java android navigationview


【解决方案1】:

我尝试了以下代码

这里button 是变量,如果类型为Button,我在上面添加了onClickListener

EDIT :: In Activity 这样做

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

EDIT :: In Fragment 这样做

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

它的工作...

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

【讨论】:

  • 你能把它扩展成一个自包含的方法吗?这样我只能在我的主要活动上使用它,而不是在我使用的片段上。
  • 在片段中尝试getActivity().findViewById(R.id.nav_view); 而不是findViewById(R.id.nav_view);
  • 确实可以,谢谢。您能否将您之前的评论合并到您的答案中,以便我接受?
  • 编辑了答案。添加了如何为ActivityFragment 添加。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 2019-04-13
  • 2021-08-18
相关资源
最近更新 更多