android.support.design.widget.NavigationView之findViewById()出现NullPointerException

原创 2015年11月20日 16:39:02

在android.support.v4.widget.DrawerLayout中的包含了两个部分:
1. 主界面
通过include一个layout布局进来作为主界面。
2. 侧滑界面
用NavigationView,其中包括了两部分:headerLayout和menu。

自己做的app实现从headerLayout中获取(findViewById())某个View(比如TextVIew),然后在Java代码中动态更改(setText())其值。

但是 Android Design Support Library NavitationView更新到v23之后的findViewById的NullPointerException
解决方案:
不要通过在xml文件中设置headerLayout(见fragment_device.xml中被注释掉的那行代码),而是通过在Java代码中来动态填充获取(如下所示)。

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        View headerLayout = LayoutInflater.from(this).inflate(R.layout.nav_header_main,navigationView,false);
        navigationView.addHeaderView(headerLayout);
        navigationView.setNavigationItemSelectedListener(this);

        TextView usernameView = (TextView) headerLayout.findViewById(R.id.username_text);
        usernameView.setText(Globals.nowUsername);

MainActivity中fragment_device.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_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:menu="@menu/activity_main_drawer" />
    <!--app:headerLayout="@layout/nav_header_main"-->

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

nav_header_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="@dimen/nav_header_height"
    android:background="@drawable/side_nav_bar"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:theme="@style/ThemeOverlay.AppCompat.Dark"
    android:orientation="vertical"
    android:gravity="bottom">

    <ImageView
        android:id="@+id/user_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        android:src="@drawable/user_logo" />

    <TextView
        android:id="@+id/username_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        android:text="@string/username_default"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

</LinearLayout>
版权声明:本文为博主原创文章,未经博主允许不得转载。

Android 自己实现 NavigationView [Design Support Library(1)]

转载请标明出处: [http://blog.csdn.net/lmj623565791/article/details/46678867](http://blog.csdn.net/lmj623...
  • lmj623565791
  • lmj623565791
  • 2015年06月30日 14:13
  • 109455

Android 之 Material Design(三)—DrawerLayout+NavigationView+Toolbar(点击icon打开关闭侧滑菜单)

Material Design相关的控件,前两篇文章已经介绍了一些常用的控件了,这篇文章主要介绍一下DrawerLayout+NavigationView+Toolbar。这样Material Des...
  • liu_ling1216
  • liu_ling1216
  • 2017年06月20日 17:52
  • 434

使用BottomNavigationView是activity无法启动问题

在mainActivity中使用了BottomNavigationView作为底部导航栏,加上后发现MainActivity不能启动了。因为在Application自定义了一个主题,只要在Bottom...
  • muscle_sunny
  • muscle_sunny
  • 2017年09月15日 10:21
  • 202

解决报错问题 Error inflating class android.support.design.widget.NavigationView

解决报错问题 Error inflating class android.support.design.widget.NavigationView错误提示: java.lang.RuntimeEx...
  • qq_15807167
  • qq_15807167
  • 2016年06月18日 21:05
  • 3763

Android Design Support Library 使用遇到的bug Error inflating class android.support.design.widget.Navigat

Android Design Support Library可谓是非常好用,但是新事物总归会遇到一些问题 举个最近遇到的问题 异常:Error inflating class android.sup...
  • ganyao939543405
  • ganyao939543405
  • 2016年08月11日 11:58
  • 1643

关于引入 NavigationView 遇到的问题

项目中需要引入SlideMenu android.support.design.widget.NavigationView 但遇到CRASH 的问题:  1. android.view.Infla...
  • to_cm
  • to_cm
  • 2016年06月29日 15:29
  • 1037

Error inflating class android.support.design.widget.CollapsingToolbarLayout

最近在玩材质化, 使用CoordinatorLayout的时候出现这个错误,应该也是对android studio的不了解导致的吧 先贴下运行时候错误代码 java.lang.RuntimeExcep...
  • u013424496
  • u013424496
  • 2017年01月22日 17:04
  • 3607

Android SnackBar 使用的问题: Error inflating class android.support.design.widget.Snackbar$SnackbarLayout

不知道大家刚开始用snackbar的时候是否遇到问题,我最开始写的时候就是在普通的activity中写了snackbar,结果就报了下面这个错误: Error inflating class andr...
  • tongnuxie
  • tongnuxie
  • 2015年08月24日 17:30
  • 1591

android中调用findViewById时出现:java.lang.NullPointerException

 这个问题很容易就会出现,当然我也出现过,自己检查了好久才明白什么原因:回答这个问题有两点:1:当你在onCreate方法中自己创建layout时,那么就不能使用findViewById,这个时候必须...
  • alley_zhang
  • alley_zhang
  • 2010年07月06日 15:52
  • 5849

ViewPager findViewById错误NullPointerException

advPager = (ViewPager) getView().findViewById(R.id.adv_pager); 08-07 12:51:16.041: E/AndroidRuntim...
  • rongwenbin
  • rongwenbin
  • 2015年08月07日 14:20
  • 418
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android.support.design.widget.NavigationView之findViewById()出现NullPointerException
举报原因:
原因补充:

(最多只允许输入30个字)