2015-07-30 19 views
13

Voglio creare NavigationDrawer con la possibilità di aggiungere nuovi elementi (ad esempio l'app meteo yahoo con l'aggiunta di nuove città). Ho lavorare NavigationDrawer con NavigationView, nel menù ho campi permanenti:elemento dinamico di aggiunta a NavigationView in 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> 

Sto cercando di aggiungere nuove Articolo questo metodo:

public boolean addNewItem(String itemName){ 
     Menu menu = navigationView.getMenu(); 
     menu.add(R.id.group,Menu.NONE,Menu.NONE,itemName); 
     return true; 
} 

E sto non ottenere esattamente quello che ho voglio: Result

Qualcuno ha un'idea di come risolvere questo problema? O perché sta succedendo questo? Non so dove e come si possano conservare informazioni sugli elementi aggiunti. Qualche idea?

+0

Hai visto la fonte del cassetto? Se si cambia qualcosa nel cassetto, ricordarsi di invalidarlo/ricaricare – deadfish

+0

Ofc, il problema è che non riesco ad aggiungere un nuovo elemento sotto Item2. Quando chiamo metodo addNewItem, il nuovo oggetto non appare nel primo gruppo sopra il separatore, ma nella parte inferiore del menu. – Skye

+0

e il metodo 'addHeaderView()'? – deadfish

risposta

17

Per aggiungere l'elemento a livello di codice, è possibile ottenere un oggetto Menu utilizzando il metodo getMenu() di NavigationView e quindi è possibile aggiungere elementi nel cassetto di navigazione utilizzando tale oggetto Menu.

final Menu menu = navigationView.getMenu(); 
for (int i = 1; i <= 3; i++) { 
    menu.add("Runtime item "+ i); 
} 

Utilizzando SubMenu, siamo in grado di aggiungere un comma e gli articoli in esso.

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

per ulteriori dettagli Check TechnoTalkative.

+0

Tutto è ok ma non è quello che intendo. Funziona solo quando rimuovo le impostazioni e gli elementi Informazioni:/ – Skye

+0

Come aggiungere icona all'elemento? Penso che questo non sia possibile. –

+4

Per aggiungere un'icona, menu.add() restituisce l'oggetto menu, sul quale è possibile chiamare setIcon(). –

12

Supponiamo di avere due gruppi, gruppo1 e gruppo2. Se si desidera aggiungere in modo dinamico elementi a group1, è possibile assegnare priorità a group2 per renderlo sempre inferiore a group1. Quindi quando aggiungi nuovi elementi al gruppo1, non verrà inserito sotto il gruppo2.

Ecco un esempio:

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

E quando si aggiungono le voci di menu a group1:

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

questo dovrebbe funzionare. L'ho provato su libreria di progettazione Android 23.1.1.

+0

è stato aggiunto ma è sempre aggiunto nella posizione superiore, non posso aggiungerlo nella posizione desiderata. qualsiasi Idea –

+0

@HiteshDhamshaniya è ancora possibile utilizzare il parametro dell'ordine nel metodo Menu.add(). L'ordine più grande verrà ordinato in basso. – Hexise