Динамический добавочный элемент в NavigationView на Android
Я хочу создать NavigationDrawer
с возможностью добавления новых элементов (например, приложение Yahoo Weather с добавлением новых городов). Я работаю 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>
Я пытаюсь добавить новый Item этот метод:
public boolean addNewItem(String itemName){
Menu menu = navigationView.getMenu();
menu.add(R.id.group,Menu.NONE,Menu.NONE,itemName);
return true;
}
И я получаю не совсем то, что хочу:
![Результат]()
Есть ли у кого-нибудь идеи, как решить эту проблему? Или почему это происходит?
Я не знаю, где и как можно хранить информацию о добавленных элементах. Есть идеи?
Ответы
Ответ 1
Чтобы добавить Элемент программно, мы можем получить объект Меню, используя метод getMenu()
из NavigationView
, а затем мы можем добавить Элементы в навигационную панель, используя этот объект 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);
}
для получения более подробной информации Проверьте TechnoTalkative.
ОБНОВЛЕНИЕ:
Если вы хотите взаимодействовать с меню, используйте
menu.add(0, itemId, 0, title);
, а затем
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
id даст вам назначенный itemId
Ответ 2
Предположим, что у вас есть две группы, group1 и group2. Если вы хотите динамически добавлять элементы в группу 1, вы можете назначить приоритет группе2, чтобы сделать ее всегда ниже group1. Затем, когда вы добавляете новые элементы в группу 1, он не будет вставлен ниже 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>
И когда вы добавляете пункты меню в группу 1:
Menu menu = navigationView.getMenu();
menu.add(R.id.group1,Menu.NONE,Menu.NONE,itemName);
Это должно сработать. Я тестировал его в библиотеке Android 23.1.1.
Ответ 3
<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);
вот и все.