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

Posted

技术标签:

【中文标题】所有视图(图像、文本等)从 mainActivity 的 findViewById() 返回 null【英文标题】:All Views (Image, Text, etc.) return null from findViewById() from mainActivity 【发布时间】:2017-08-05 20:13:02 【问题描述】:

我正在尝试从MainActivity 类中分配nav_header.xml 中的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_
android:layout_
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_
    android:layout_
    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_
android:layout_
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_
    android:layout_ />

<android.support.design.widget.NavigationView
    android:layout_
    android:layout_
    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>

【问题讨论】:

你能发布你的 mainactivity 代码吗? 查看***.com/questions/32246360/… 【参考方案1】:

header 不是 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);

【讨论】:

以上是关于所有视图(图像、文本等)从 mainActivity 的 findViewById() 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

选择图像不同图像时在所有文本视图中具有相同名称

将图像视图转换为图像时质量会降低

在另一个活动的列表视图的编辑文本中获取另一个活动的价值

从列表视图中检索数据并将其显示在文本视图/图像视图中

如何从表格视图中的单元格点击图像视图

如何在带有文本的列表视图中显示从 API 下载的图像