2015-07-23 4 views
6

Ich habe eine ziemlich normale NavigationView. Wenn ich ein statisches Layout in der Kopfzeile wie unten verwende, funktioniert es perfekt.NavigationAnzeigen, wie man mit dynamischen Header-Inhalten umgehen kann

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

Aber ich möchte einen dynamischen Header haben, so thah ich es ändern kann, wenn der Benutzer in etc angemeldet ... Also habe ich versucht, ein Fragment statt nav_header.xml zu verwenden

<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 benutze ein Fragment im headerLayout, damit ich meine gesamte Logik in der Java-Datei des Fragments verarbeiten kann. Oder was ist die richtige Lösung für dieses Problem?

+0

Kasse meine Antwort hier ... http://stackoverflow.com/a/30660069/3544839 ..hier habe ich TextView als root verwendet, während Sie eine beliebige viewgroup verwenden können und sobald Sie ein Objekt von viewgroup erhalten, können Sie es einfach anpassen. – Moinkhan

Antwort

11

Sie können dies im Code tun, indem Sie das benutzerdefinierte Layout aufblasen und die Kopfzeile für die Navigationsansicht festlegen.

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

Sie müssen app:headerLayout in XML nicht festlegen.

+1

Java hilft Ihnen, einfache Dinge auf eine schwierige Art und Weise auszuführen. – fnc12

+0

toll, danke .. !! –

10

Sie könnten den Header auf xml wie folgt erklärt nennen:

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

Und Sie erhalten dann die Ansichten wie folgt aus:

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

Dies funktioniert, wenn Sie "app: headerLayout" in XML festgelegt haben –