天天看點

在主布局通過findViewById(view)擷取NavigationView中的view報空

<?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_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

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

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

           

就像上面的簡單嵌套,在所需activity中 find 布局nav_header_main中的view竟然報空-----------------------直接上解決辦法吧。

我之前的方法是

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
    ivHead     = (ImageView) findViewById(R.id.iv_head);//1
    ivErWei    = (ImageView) findViewById(R.id.er_wei);//2
    ivHead.setonclicklistener(this);//3
           

正常編譯時走到1,2步是不會報錯,3位置nullpointer;

隻要通過NavigationView中Header去尋找即可:

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
 navigationView.setNavigationItemSelectedListener(this);
 
 View headerView = navigationView.getHeaderView(0);//得到頭部具
 
 ivHead     = (ImageView) headerView.findViewById(R.id.iv_head);
 ivErWei    = (ImageView) headerView.findViewById(R.id.er_wei);
           

繼續閱讀