2016-03-12 26 views
6

Ho un DrawerLayout che racchiude un NavigationView e questa attività di layout funge da cassetto di navigazione comune per tutte le attività nella mia app. Fornisco la risorsa di menu per app:menu nella visualizzazione di navigazione. Ho alcune voci di menu, ma voglio che una voce di menu sia pieghevole/espandibile, così quando clicco su di essa, si espande per mostrare due sottomenu e collassa di nuovo con un secondo clic.Come aggiungere una voce di menu comprimibile nel cassetto di navigazione in Android?

Ho aggiunto dei sottomenu aggiungendo un altro <menu> all'interno dello <item> ma non posso renderlo pieghevole/espandibile.

Inoltre, non voglio utilizzare ExpandableListView per il mio scopo. Invece, ho solo bisogno di fare alcune modifiche nel file delle risorse del menu. Per favore, basta indicarmi la direzione corretta. Ho cercato Google solo per trovare codice, blog ed esempi di elementi di elenco comprimibili utilizzando ExpandableListView, ma ho bisogno che funzioni con il widget di progettazione NavigationView dalla libreria di supporto alla progettazione.

Ecco il mio codice per il file di menu:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

<group android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_aboutus" 
     android:title="About Us" /> 

    <item 
     android:id="@+id/nav_faq" 
     android:title="FAQs" /> 
    <item 
     android:id="@+id/nav_share" 
     android:title="Share" /> 
    <item 
     android:id="@+id/nav_myaccount" 
     android:title="My Account" /> 
    <item 
     android:id="@+id/nav_legal" 
     android:title="Legal" > 
     <menu> 
       <item 
        android:id="@+id/nav_tnc" 
        android:title="Terms and Conditions" /> 
       <item 
        android:id="@+id/nav_pp" 
        android:title="Privacy Policy" /> 
      </group> 
     </menu> 
    </item> 

</menu> 

Voglio voce di menu giuridica che dovrà avere espandibile 'Termini e Condizioni' due voci di sottomenu, 'Privacy Policy'.

+0

Non penso che sia possibile usando solo 'NavigationView'. –

+0

Sì !! Non è possibile usare solo 'NavigationView' !! Grazie per l'aiuto però !! –

risposta

5

È possibile utilizzare le viste elenco espandibile all'interno dei cassetti di navigazione, non capisco perché non si desidera utilizzarli. Ulteriori informazioni su questo possono essere trovati qui http://developer.android.com/reference/android/widget/ExpandableListView.html

Se si insiste a non utilizzare ExpandableListView, l'alternativa è progettare l'espansione manualmente utilizzando il menu OnSelect per quell'elemento specifico. Anche se non so davvero perché lo vuoi, staresti semplicemente re-implementando la ruota.

+0

Grazie per la risposta .. Non userò ExpandableListView .. Sono riuscito a lasciarlo essere come era ... Semplicemente menu e sottomenu senza funzionalità collassabili ed espandibili ... Ancora +1 per la pronta risposta !! –

+0

Accettando questo come risposta, ho finito con l'utilizzo di menu semplici nel mio NavigationView !! :) –

2

c'è un trucco per eseguire questa operazione senza utilizzare ExpandableListView.Aggiungere tali voci di menu normalmente nel file di layout del menu e nasconderli/mostrarli sul clic articolo della voce di menu in cui si desidera mostrarli in questo modo: `public boolean onNavigationItemSelected (Oggetto MenuItem) { // Gestisci la visualizzazione della navigazione clicca qui.

NavigationView nv= (NavigationView) findViewById(R.id.nav_view); 
    Menu m=nv.getMenu(); 
    int id = item.getItemId(); 
    if (id == R.id.nav_posts) { 
     boolean b=!m.findItem(R.id.nav_class).isVisible(); 
     m.findItem(R.id.nav_class).setVisible(b); 
     m.findItem(R.id.nav_dept).setVisible(b); 
     m.findItem(R.id.nav_batch).setVisible(b); 
     m.findItem(R.id.nav_campus).setVisible(b); 
     return true; 
    } else if (id == R.id.nav_walls) { 
     boolean b=!m.findItem(R.id.nav_wall_events).isVisible(); 
     m.findItem(R.id.nav_wall_events).setVisible(b); 
     m.findItem(R.id.nav_wall_fun).setVisible(b); 
     m.findItem(R.id.nav_wall_hadith).setVisible(b); 
     m.findItem(R.id.nav_wall_news).setVisible(b); 
     m.findItem(R.id.nav_wall_Poetry).setVisible(b); 
     return true; 
    } else if (id == R.id.nav_com) { 
     m.findItem(R.id.nav_share).setVisible(false); 
     m.findItem(R.id.nav_send).setVisible(false); 

    } else if (id == R.id.nav_share) { 

    } else if (id == R.id.nav_send) { 

    } 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
}` 

dove file di layout del menu è:

<?xml version="1.0" encoding="utf-8"?> 

<group android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_posts" 
     android:icon="@drawable/ic_menu_camera" 
     android:title="Posts" /> 

    <item 
     android:id="@+id/nav_class" 
     android:title="Class" 
     android:visible="false" /> 
    <item 
     android:id="@+id/nav_dept" 
     android:title="Department" 
     android:visible="false" /> 
    <item 
     android:id="@+id/nav_batch" 
     android:title="Batch" 
     android:visible="false" /> 
    <item 
     android:id="@+id/nav_campus" 
     android:title="Campus" 
     android:visible="false" /> 


    <item 
     android:id="@+id/nav_walls" 
     android:icon="@drawable/ic_menu_gallery" 
     android:title="Walls" /> 

    <item 
     android:id="@+id/nav_wall_news" 
     android:title="News" 
     android:visible="false" /> 
    <item 
     android:id="@+id/nav_wall_events" 
     android:title="Events" 
     android:visible="false" /> 
    <item 
     android:id="@+id/nav_wall_fun" 
     android:title="Fun" 
     android:visible="false" /> 
    <item 
     android:id="@+id/nav_wall_hadith" 
     android:title="Hadith" 
     android:visible="false" /> 
    <item 
     android:id="@+id/nav_wall_Poetry" 
     android:title="Poetry" 
     android:visible="false" /> 


</group> 

<item 
    android:id="@+id/nav_com" 
    android:title="Communicate"> 
    <menu> 
     <item 
      android:id="@+id/nav_share" 
      android:icon="@drawable/ic_menu_share" 
      android:title="Share" /> 
     <item 
      android:id="@+id/nav_send" 
      android:icon="@drawable/ic_menu_send" 
      android:title="Send" /> 
    </menu> 
</item> 

0

Nel menu di file di layout:

<item 
     android:title="Setup" 
     android:id="@+id/SetupGr" 
     android:icon="@drawable/setup" 
     /> 
<group 
    android:checkableBehavior="none" 
    android:id="@+id/SetupGroup"> 
    <item 
     android:id="@+id/setupOutdoor" 
     android:icon="@drawable/outdoor" 
     android:title="Outdoor" /> 
    <item 
     android:id="@+id/setupClocks" 
     android:icon="@drawable/ic_launcher" 
     android:title="Clocks" /> 
    <item 
     android:id="@+id/selectMaps" 
     android:icon="@drawable/map" 
     android:title="Select map" /> 
</group> 

In MyActivity.java - carico di menu desiderata:

public void LoadNavMenu(int iMenu){ 
    navigationView.getMenu().clear(); 
    navigationView.inflateMenu(iMenu); 
    navigationView.getMenu().setGroupVisible(R.id.HelpGroup,false); 
    navigationView.getMenu().setGroupVisible(R.id.SetupGroup,false); 
} 

E OnNavigationItemSelected:

ho 1 articolo - Setup - e quando l'utente seleziona esso - ho impostato di gruppo con id - SetupGroup - visibile e ritorno senza cassetto di chiusura. Altrimenti, ho impostato tutti i gruppi invisibili.