我想构建NavigationDrawer
,可以添加新项目(例如添加新城市的yahoo weather App)。我与NavigationDrawer
一起工作NavigationView
,在菜单中我有永久字段:
<group
android:id="@+id/group"
android:checkableBehavior="single">
<item
android:checked="false"
android:id="@+id/item1"
android:icon="@drawable/ic_inbox_black_24dp"
android:title="Item1" />
<item
android:checked="false"
android:id="@+id/Item2"
android:icon="@drawable/ic_inbox_black_24dp"
android:title="Item2"
/>
</group>
我尝试添加新的项此方法:
public boolean addNewItem(String itemName){
Menu menu = navigationView.getMenu();
menu.add(R.id.group,Menu.NONE,Menu.NONE,itemName);
return true;
}
有谁知道如何解决这个问题?或者为什么会这样? 我不知道在哪里以及如何保存有关添加元素的信息。有任何想法吗?
答案 0 :(得分:21)
要以编程方式添加项目,我们可以使用getMenu()
NavigationView
方法获取Menu对象,然后我们可以使用该Menu
对象将项目添加到导航栏中。
final Menu menu = navigationView.getMenu();
for (int i = 1; i <= 3; i++) {
menu.add("Runtime item "+ i);
}
使用SubMenu
,我们可以在其中添加一个子项和项目。
// adding a section and items into it
final SubMenu subMenu = menu.addSubMenu("SubMenu Title");
for (int i = 1; i <= 2; i++) {
subMenu.add("SubMenu Item " + i);
}
了解更多详情Check TechnoTalkative。
编辑:
如果要与菜单进行交互,请使用
menu.add(0, itemId, 0, title);
然后再
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
id 会为您分配 itemId
答案 1 :(得分:12)
假设您有两个组,group1和group2。如果要将项目动态添加到group1,则可以为group2分配优先级,使其始终低于group1。然后,当您向group1添加新项目时,它不会插入group2下面。
以下是一个示例:
<group android:id="@+id/group1" />
<group
android:id="@+id/group2"
android:orderInCategory="999">
<item
android:checked="false"
android:id="@+id/item1"
android:icon="@drawable/ic_inbox_black_24dp"
android:title="Item1" />
<item
android:checked="false"
android:id="@+id/Item2"
android:icon="@drawable/ic_inbox_black_24dp"
android:title="Item2"
/>
</group>
当您向group1添加菜单项时:
Menu menu = navigationView.getMenu();
menu.add(R.id.group1,Menu.NONE,Menu.NONE,itemName);
这应该有效。我在Android设计库23.1.1上进行了测试。
答案 2 :(得分:1)
<group android:checkableBehavior="single">
<item
android:id="@+id/send_notification"
android:icon="@drawable/ic_menu_send"
android:title="@string/send_notification"
android:visible="false"/>
</group>
如果您也想将项目动态添加到导航抽屉中,请使其在xml中不可见,并通过编程方式使其可见,如下所示。
NavigationView navigationView = findViewById(R.id.nav_view);
Menu menu=navigationView.getMenu();
menu.findItem(R.id.send_notification).setVisible(true);
就这样。