所有视图(图像,文本等)都从mainActivity中的findViewById()返回null

时间:2017-08-05 20:13:03

标签: java android navigation-drawer

我正在尝试从nav_header.xmlMainActivity中分配dailyImage。

MainActivity类有setContentView(R.layout.activity_main);

我可以在nav_action.xml中分配视图,但不能在nav_header.xml中分配 我似乎无法想象为什么findViewById()在尝试从MainActivity类访问nav_header.xml中的DailyImage时返回null。

保持这种状态,有没有办法分配

nav_header.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="180dp"
android:background="@android:color/holo_blue_dark"
android:padding="10dp"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
tools:context="com.example.hello.world.MainActivity">

<ImageView
    android:id="@+id/DailyImage"
    android:layout_width="match_parent"
    android:layout_height="108dp"
    android:layout_below="@+id/menu_text"
    android:layout_alignParentStart="true" />
</RelativeLayout>

activity_main.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:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/nav_drawer_main"
android:background="@color/gray"
android:orientation="vertical"
android:fitsSystemWindows="true"
tools:openDrawer="start">

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

<android.support.design.widget.NavigationView
    android:layout_width="260dp"
    android:layout_height="match_parent"
    android:id="@+id/nav_men"
    android:background="@color/black"
    app:menu="@menu/nav_menu"
    android:layout_gravity="start"
    app:headerLayout="@layout/nav_header"
    app:itemIconTint="@drawable/drawer_item"
    app:itemTextColor="@drawable/drawer_item">
</android.support.design.widget.NavigationView>

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

1 个答案:

答案 0 :(得分:0)

标头不是Activity根布局的一部分,因此它无法遍历所有嵌套视图以查找它,因此它为null。

您必须浏览NavigationView。

NavigationView get/find header layout

Is there any way to control views inside NavigationView header?

// Shouldn't be null
NavigationView navView = (NavigationView) findViewById(R.id.nav_men); 
View headerView = navView.getHeaderView(0);

// This is the ImageView
ImageView iv = (ImageView) headerView.findViewById(R.id.DailyImage);