2015-07-30 3 views
13

Я хочу построить NavigationDrawer с возможностью добавления новых элементов (например, приложение погоды Yahoo с добавлением новых городов). Я работаю NavigationDrawer с NavigationView, в меню у меня есть постоянные поля:динамическое добавление элемента в NavigationView в Android

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

И я получаю не то, что я хочу: Result

Есть ли у кого-нибудь идеи, как решить эту проблему? Или почему это происходит? Я не знаю, где и как можно хранить информацию о добавленных элементах. Есть идеи?

+0

Вы видели источник ящика? Если вы что-то измените в ящике, не забудьте сделать его недействительным/перезагрузить – deadfish

+0

Ofc, проблема в том, что я не могу добавить новый элемент ниже Item2. Когда я вызываю метод addNewItem, новый элемент не отображается в первой группе над разделителем, а в нижней части меню. – Skye

+0

как насчет метода 'addHeaderView()'? – deadfish

ответ

17

Чтобы добавить объект программно, мы можем получить объект меню с использованием метода 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); 
} 

для получения более подробной информации Check TechnoTalkative.

+0

Все в порядке, но это не то, что я имею в виду. Он работает только при удалении настроек и элементов:/ – Skye

+0

Как добавить значок к элементу? Я думаю, что это невозможно. –

+4

Для добавления значка menu.add() возвращает элемент menuItem, по которому вы можете вызвать setIcon(). –

12

Предположим, у вас есть две группы, 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> 

И при добавлении пунктов меню group1:

Menu menu = navigationView.getMenu(); 
menu.add(R.id.group1,Menu.NONE,Menu.NONE,itemName); 

Это должно работать. Я тестировал его в библиотеке Android 23.1.1.

+0

Меню добавлено, но оно всегда добавляется в верхнее положение, я не могу добавить его в желаемое положение. любая идея –

+0

@HiteshDhamshaniya вы все равно можете использовать параметр порядка в методе Menu.add(). Более крупный заказ будет отсортирован в нижней части. – Hexise

Смежные вопросы