2016-05-19 24 views
1

Ich habe Probleme bei der Entscheidung, wo das Image eines ImageView im Android NavigationDrawer eingerichtet werden soll.Wann muss ich Resource für ImageView in Android festlegen? NavigationDrawer

Meine Android App hat eine NavigationDrawer, die eine Image in ein paar andere Elemente innerhalb des NavigationDrawer Header-Layout (app:headerLayout="@layout/navdrawer_header) verschachtelt enthält, und meine navdrawer_header.xml hat die folgende Struktur:

<LinearLayout android:id="@+id/navdrawer_header"> 
    ... 
    <ImageView android:[email protected]+id/image_view 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
    ... 
</LinearLayout> 

Ich stelle das Bild (img.jpg in meinem ziehbar Ordner) über

ImageView imageView = (ImageView) view.findViewById(R.id.image_view); 
imageView.setImageResource(R.drawable.img); 

Wenn von OnCreate in meinem MainActivity genannt, die imageView ist null und die App stürzt ab. Dasselbe gilt, wenn ich die obigen Zeilen nach OnPostCreate oder sogar OnStart verschiebe. Mein Verständnis ist, dass die Ansicht zu diesem Zeitpunkt noch nicht initialisiert ist und daher findViewById null zurückgibt. Als Workaround habe ich die OnDrawerOpened Methode überschrieben und meinen Code von oben auf diese Methode verschoben. Das funktioniert gut, aber ich bin ziemlich sicher, dass es nicht der beste Weg ist, da die Methode jedes Mal aufgerufen wird, wenn die Schublade geöffnet wird. Stattdessen würde ich eine Methode benötigen, die nur einmal bei der Erstellung der Schublade aufgerufen wird.

Was ist die beste Vorgehensweise hier, d. H. Wo sollte ich die Ressource eines ImageView, das im NavigationDrawer enthalten ist, festlegen?

Ich habe versucht, view. und experimentiert mit verschiedenen Werten von view, zum Beispiel das Weglassen von ihm die Zuordnung der NavigationView oder DrawerLayout mit meiner Schublade verbunden, aber es das Problem nicht lösen.

+0

prüfen diese [link] (http://androhub.com/navigation-view-material-design-support-library-tutorial/). –

Antwort

2

Versuchen Sie folgendes:

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

ImageView imageView = (ImageView) view.findViewById(R.id.image_view); 
imageView.setImageResource(R.drawable.img); 
+0

Danke, einfach und funktioniert! – untergam