2015-11-05 43 views
4

我正在使用NavigationView,它有一個標題佈局,該標題佈局包含一個textview,我試圖在我的Activity中訪問它並返回null。NavigationView header中的TextView返回null

試過花很多時間在上面,沒有希望。

我的動態

public class MainActivity extends AppCompatActivity { 

    private DrawerLayout mDrawerLayout; 
    RelativeLayout headerLL; 
    ImageView userIV; 
    TextView usernameTV; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     headerLL = (RelativeLayout) findViewById(R.id.navHeaderLL); 
     userIV = (ImageView) findViewById(R.id.userDPIV); 
     usernameTV = (TextView) findViewById(R.id.usernameTV); 
     //getting error here 
     usernameTV.setText("Ashiq"); 



     initializeDrawer(); 

    } 
} 

activity_mail.xml

<?xml version="1.0" encoding="utf-8"?> 
    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/drawer_layout" 
     android:layout_height="match_parent" 
     android:layout_width="match_parent" 
     android:fitsSystemWindows="true" 
     tools:context=".MainActivity"> 

     <include layout="@layout/include_list_viewpager"/> 

     <android.support.design.widget.NavigationView 
      android:id="@+id/nav_view" 
      android:layout_height="match_parent" 
      android:layout_width="wrap_content" 
      android:layout_gravity="start" 
      android:fitsSystemWindows="true" 
      app:headerLayout="@layout/nav_header" 
      app:menu="@menu/drawer_view" 
      /> 

    </android.support.v4.widget.DrawerLayout> 

nav_header.xml

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="192dp" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:background="?attr/colorPrimaryDark" 
     android:padding="16dp" 
     android:id="@+id/navHeaderLL" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark"> 

     <ImageView 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      android:id="@+id/userDPIV" 
      android:elevation="4dp" 
      android:layout_above="@+id/usernameTV" 
      android:layout_marginBottom="10dp" 
      tools:src="@drawable/ic_menu" 
      /> 

     <TextView 
      android:id="@+id/usernameTV" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      style="@style/TextViewAppearance.UserName" 
      tools:text="Username" 
     android:layout_alignParentBottom="true" 
     android:textAppearance="@style/TextAppearance.AppCompat.Body1"/> 

</RelativeLayout> 
+2

請檢查:HTTP: //stackoverflow.com/questions/31241683/are-there-any-way-to-control-view-insde-navigationview-header –

+0

@denis_lor:請看這個https://github.com/antoniolg/MaterializeYourApp/blob /master/app/src/main/java/com/antonioleiva/materializeyourapp/MainActivity.java –

回答

1

做次是。

  1. 你應該初始化NavigationView

2.After(的未來的setContentView),初始化導航視圖元素

更改代碼如下

public class MainActivity extends AppCompatActivity { 
    private DrawerLayout mDrawerLayout; 
    RelativeLayout headerLL; 
    ImageView userIV; 
    TextView usernameTV; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // 1 
     initializeDrawer(); 

     //2 

     headerLL = (RelativeLayout) findViewById(R.id.navHeaderLL); 
     userIV = (ImageView) findViewById(R.id.userDPIV); 
     usernameTV = (TextView) findViewById(R.id.usernameTV); 
     //getting error here 
     usernameTV.setText("Ashiq"); 


    } 
} 

希望這有助於。

編碼快樂:)

+0

它沒有事情要做...請檢查https://github.com/antoniolg/MaterializeYourApp/blob/master/app/src/main/java/com/antonioleiva/materializeyourapp/MainActivity.java –

+0

我的回答是正確的。如何在沒有初始化導航抽屜的情況下獲得NV元素值。 ? @Shaik –

+0

您是否檢查了鏈接,並且可以在設置導航器抽屜內的圖像視圖之前指出他已初始化導航器抽屜的位置。 –

22

後初始化NavigationView你趕上與navigationView.getHeaderView充氣頭(0),並使用findViewById獲得查看

navigationView = (NavigationView) findViewById(R.id.nav_view); 
(TextView) navigationView.getHeaderView(0).findViewById(R.id.viewName); 
+0

問題修復..你可以解釋,如果可能的話 –