2016-05-19 8 views
1

Android NavigationDrawerに含まれるImageViewの画像をどこに設定するかを決定するのに問題があります。Android NavigationDrawerでImageViewのリソースを設定するタイミング

私のAndroidアプリはNavigationDrawerヘッダーのレイアウト(app:headerLayout="@layout/navdrawer_header)内の他の要素のカップルの中にネストされたImageViewのが含まれているNavigationDrawerを持っている、と私navdrawer_header.xmlは、以下の構造を有する:

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

私は画像を設定していますが

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

を経由して(私の描画可能なフォルダにimg.jpg)私MainActivityOnCreateから呼び出された場合は、imageViewはnullになり、アプリケーションがクラッシュします。上記の行をOnPostCreateまたはOnStartに移動する場合も同じです。 私の理解では、その時点でまだビューが初期化されていないため、findViewByIdがnullを返します。回避策として、OnDrawerOpenedメソッドを上書きし、上のコードをそのメソッドに移動しました。 これはうまくいきますが、引き出しが開かれるたびにこのメソッドが呼び出されるので、それが最善の方法ではないことは確かです。代わりに、私は引き出しの作成時に一度呼び出されるメソッドが必要になります。

ここでベストプラクティスは何ですか?つまり、NavigationDrawerに含まれるImageViewのリソースはどこに設定する必要がありますか?

私はそれに割り当てることによってview.を省略しようと、例えばviewの異なる値と実験してきたNavigationViewや私の引き出しに関連したDrawerLayoutが、それは問題を解決していません。

+0

は、この[リンク](http://androhub.com/navigation-view-material-design-support-library-tutorial/)を確認してください。 –

答えて

2

はこれを試してみてください:

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

ありがとう、シンプルで機能します! – untergam

関連する問題