2015-07-23 3 views
6

Ho un NavigationView piuttosto standard. Quando uso un layout statico nell'intestazione come sotto funziona perfettamente.NavigazioneVisualizza come gestire il contenuto dell'intestazione dinamica

<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_height="match_parent" 
    android:layout_width="wrap_content" 
    android:layout_gravity="start" 
    android:fitsSystemWindows="true" 
    app:headerLayout="@layout/nav_header" 
    app:menu="@menu/drawer_view"/> 

Ma voglio avere un colpo di testa dinamico in modo thah posso cambiarlo quando l'utente loggato ecc ... Così ho cercato di usare un frammento, invece di nav_header.xml

<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_height="match_parent" 
    android:layout_width="wrap_content" 
    android:layout_gravity="start" 
    android:fitsSystemWindows="true" 
    app:headerLayout="@layout/fragment_header" 
    app:menu="@menu/drawer_view"/> 

Can I usa un frammento nell'headerLayout così posso gestire tutta la mia logica nel file java del frammento. O qual è la soluzione giusta per gestire questo problema.

+0

checkout la mia risposta qui ... http://stackoverflow.com/a/30660069/3544839 ..qui ho usato TextView come root mentre puoi usare qualsiasi viewgroup e una volta ottenuto oggetto di viewgroup puoi facilmente personalizzarlo .. – Moinkhan

risposta

11

È possibile farlo in codice gonfiando il layout personalizzato e impostando l'intestazione per la visualizzazione di navigazione.

NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView); 
View nav_header = LayoutInflater.from(this).inflate(R.layout.nav_header, null); 
((TextView) nav_header.findViewById(R.id.name)).setText("UserName"); 
navigationView.addHeaderView(nav_header); 

Non è necessario impostare app:headerLayout in xml.

+1

Java ti aiuta a eseguire le cose facili in un modo difficile. – fnc12

+0

fantastico, grazie .. !! –

10

Si può chiamare l'intestazione dichiarato su XML come questo:

NavigationView navigationView= (NavigationView) findViewById (R.id.navigationView);  
View header = navigationView.getHeaderView(0); 

e quindi ottenere il punto di vista come questo:

TextView text = (TextView) header.findViewById(R.id.text); 
+0

Funziona quando si imposta 'app: headerLayout' in xml –