Navigation Drawer AccountHeader

  • Antworten:3
  • Bentwortet
lampenlampen
  • Forum-Beiträge: 15

11.03.2016, 13:37:18 via Website

Hallo,

ich bin zur Zeit dabei eine Android App zu programmieren und benutze dabei den Navigation Drawer, der von Android Studio erzeugt wird. Die App soll dabei verschiedene Accounts unterstützen und ich wollte im Navigation Drawer oben den Namen und die Email-Adresse passend zum Benutzer anpassen.
Meine Frage ist jetzt wie ich auf die beiden TextView Elemente zugreifen kann. Das Problem ist nämlich, dass es zu der XML-Datei, in der die Informationen festgelegt werden keine Java-Klasse gibt.
Wenn ich also in meiner MainActivity die TextView Elemente hinzufüge gibt er eine NullPointerException.

Meine zweite Frage wäre, ob es möglich ist einen OnClickListener auf die TextView Einträge zu platzieren, damit ich dann die Benutzerverwaltung aufrufen kann. In der MainActivity kann ich keinen hinzufügen, da er dann wieder eine NullPointerException gibt und in die XML-Datei hab ich es auch schon mit "Android:onClick="..." probiert, aber er findet dann die Methode nicht.

Vielen Dank schon mal Im Voraus.
Sollte es irgendwelche Verständnis Schwierigkeiten geben, bitte melden.

Grüße

lampenlampen

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.03.2016, 14:12:55 via Website

Das geht schon, du musst nur erstmal die HeaderView als View Element holen:

Sagen wir du hast deine NavigationView navView;
Disese ist auch initialisiert etc.

Dann kannst du mit
View v = navView.getHeaderView(0);
die erste HeaderView holen.

Auf dieser View kannst du dann per findViewById deine TextViews etc finden, da dann auch den Text setzen und onClicks definieren:

bsp:
TextView tv = (TextView)v.findViewById(R.id.UserTestView);
tv.setText(...);
usw...

LG Pascal //It's not a bug, it's a feature. :) ;)

lampenlampen

Antworten
lampenlampen
  • Forum-Beiträge: 15

11.03.2016, 14:34:48 via Website

Die gute Nachricht zuerst: Es funktioniert.
Vielen Dank dafür.

Jetzt stellt sich mir nur die Frage: Warum?
Ich muss gestehen ich bin blutiger Anfänger was Android-Programmierung angeht.
Und was ist den die HeaderView?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.03.2016, 15:10:33 via Website

Gut dass es geht :)

Dann will ich dir das mal erklären:

Früher ging das noch so, da konne man die Felder direkt aus der Min Activity anspechen.
Seit der änderung auf MaterialDesign hat google allerdings das Element NavigationView eingefügt, welche einen extra Header hat.
Dieser Header ist von der View her vom Mian Layout unabhängig und wird deswrgen nicht auf diesem gefunden.
Somit musst du erst die View des header über die NavigationView holen, das machst du mit getHeaderView(0);
Dann kannst du die HeaderView weiterverarbeiten.

Dies macht insofern sinn, dass die HeaderView nicht an dein MainLayout gebunden ist du du somit die Logik der HeaderView auslagern könntest.
Da du das aber nicht brauchst, ist es für dich erstmal egal

LG Pascal //It's not a bug, it's a feature. :) ;)

lampenlampen

Antworten