2016-07-25 8 views
0

Ich verwende die DrawerLayout-Vorlage aus Android Studio. Ich versuche herauszufinden, wie man das Bild und den Text in der Kopfzeile durch Code ändern kann.Ändern Sie ImageView und Text der DrawerLayout Vorlage in Android Studio?

Ich versuchte, die „ids“ aus der Ansicht Navigation zu finden, etwa so:

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    usrTag = (TextView)navigationView.findViewById(R.id.usrName); 
    tagrEmail = (TextView)navigationView.findViewById(R.id.usrEmail); 
    tagrPic = (CircleImageView)navigationView.findViewById(R.id.usrImg); 

Aber ich bekomme eine Null-Zeiger Ausnahme, wenn ich versuche, den Text oder irgendetwas anderes von einem dieser Ansichten zu ändern. Ich habe auch mit findViewById versucht, aber das hat auch nicht funktioniert. Irgendwelche Ideen? Weil ich frustriert bin und ratlos bin. Ich nahm an, dass ich nur das Layout nach ID finden musste und dann die ID-Ansichten innerhalb dieses Layouts finden musste, aber das war nicht der Fall.

Einige Klärung

In Android Studio, wenn Sie Datei> Neu> Neues Projekt und gehen Sie durch den Assistenten und wählen Navigation anzeigen Aktivität Sie genau sehen, was ich mich beziehe. Hauptklasse ist eine Aktivität. Das standardmäßig erstellte Aktivität verweist auf ein Layout genannt nav_header_main.xml, die wie folgt aussieht:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/navProfile" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/nav_header_height" 
    android:background="@drawable/side_nav_bar" 
    android:gravity="bottom" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark"> 

    <de.hdodenhof.circleimageview.CircleImageView 
     android:id="@+id/usrImg" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingTop="@dimen/nav_header_vertical_spacing" 
     android:src="@drawable/ic_launcher" /> 

    <TextView 
     android:id="@+id/usrName" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="@dimen/nav_header_vertical_spacing" 
     android:text="Android Studio" 
     android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> 

    <TextView 
     android:id="@+id/usrEmail" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="[email protected]" /> 

</LinearLayout> 

In der MainActivity Klasse gibt es keinen Hinweis auf das Layout. Ich habe versucht, einen Verweis auf das Layout zu erstellen und dann die Ansichten innerhalb dieses Layouts mit findViewById zu finden, aber ich habe immer noch null Zeigerausnahme.

navigationView.getMenu().findItem(R.id.your_menu_item_id); 

In Ihrem nav_header_main.xml verwendet durch Schublade (Beispiel einen Artikel):

+0

Ja, ich habe doppelt und dreifach überprüft, ob diese IDs existieren und sie tun. –

+0

Verwenden Sie ein Fragment oder eine Aktivität? – Snoobie

+0

@Snoobie Ich verwende die Standardnavigationsansicht Aktivität, wenn Sie ein neues Projekt in Android Studio auswählen. Ich versuche nicht auf einen der Menüpunkte zuzugreifen. Wenn Sie sich meinen Kommentar unterhalb der ersten Antwort ansehen, sehen Sie, auf welches Layout ich mich beziehe. –

Antwort

1

Sie können die getHeaderView() -Methode verwenden, um Elemente im Header-Layout von NavigationView abzurufen.

View header = navigationView.getHeaderView(0); 
TextView usrName = (TextView) header.findViewById(R.id.usrName); 
TextView usrEmail = (TextView) header.findViewById(R.id.usrEmail); 
CircleImageView usrImg = (CircleImageView) header.findViewById(R.id.usrImg); 
+0

Das hat perfekt funktioniert! Vielen Dank! Fühle mich, als hätte ich gerade ein Auto von meinem Gehirn genommen. Ich fühle mich jetzt so erleichtert. Also vielen Dank!! –

0

Um Ansicht für einen Artikel in der Schublade Menü Verwendung zu erhalten

 <item 
     android:icon="@drawable/icon" 
     android:title="Title" 
     android:id="@+id/your_menu_item_id" //here id 
     /> 

anzeigen Um von Artikel :

navigationView.getMenu().findItem(R.id.your_menu_item_id).getActionView(); 

IMPO RTANT. Stellen Sie sicher, dass Ihre Schublade aufgeblasen ist.

Symbol ändern und Titel des Artikels:.

navigationView.getMenu() findItem (R.id.your_menu_item_id) .setTitle ("neuer Titel"); navigationView.getMenu(). FindItem (R.id.ihr_menu_item_id) .setIcon (icon_drawable_here);

+0

Ich schätze den Versuch, aber wenn Sie zu Android Studio gehen> neues Projekt> Navigation Schublade Aktivität sehen Sie im Layouts-Ordner "nav_header_main.xml" Das ist, wo ich versuche, die Bildansicht und Textansicht mit Code zu ändern. –

+0

Ich habe hinzugefügt, wie Symbol und Text in Menüelement ändern. Also ich denke das ist was du brauchst. –

+0

Ich schätze die Hilfe, aber wenn Sie das Layout betrachten, gibt es keine Menüpunkte. –