-1

私はAndroidアプリを開発しています。私のアプリでは、ナビゲーションビューを使って作業しています。私は状況に応じてヘッダービューのデザインをプログラム的に変更する必要があります。しかし、ヘッダービューのインスタンスの変数は常にnull例外をスローします。私のコードで何が間違っていますか?Androidのナビゲーションビューのヘッダービューのインスタンスは常にnullです

これは私がこれはこれは私がヘッダビューをインスタンス化し、活動してそれに変更を加える方法である私のヘッダビュー

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/header_view" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

</LinearLayout> 

のレイアウトでナビゲーションビューで

<android.support.design.widget.NavigationView 
     app:itemIconTint="@drawable/drawer_item" 
     app:itemTextColor="@drawable/drawer_item" 
     android:id="@+id/left_nv_view" 
     app:headerLayout="@layout/header_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" /> 

をヘッダビューを設定する方法です

//I initialized navigation drawer and navigation view first 
    headerView = (LinearLayout)findViewById(R.id.header_view); 
    headerView.setOrientation(LinearLayout.VERTICAL); 

しかし、常にNULLポインタ例外がスローされます。コードを修正するにはどうすればよいですか?

+0

完全な 'onCreate'を表示してください。具体的には、 'setContentView'は何をしますか? –

+0

'NavigationView#getHeaderView()'メソッドを使用してください。 –

+1

ありがとうございます@Mike。それはうまくいった。 –

答えて

1

NavigationViewは、ヘッダを取得するのに少し時間がかかりますViewは膨らませて配置します。多くの場合、onCreate()の処理が完了するまでは完了しませんが、NavigationView#getHeaderView()メソッドを使用すると、強制的にすぐに処理を実行できます。

ヘッダが正常に読み込まれた後、ActivityView階層でヘッダを見つけることができ、findViewById()へのコールはnullを返しません。

関連する問題