视频加载失败

Android自带抽屉布局及NavigationView的使用

477 字
2 分钟
Android自带抽屉布局及NavigationView的使用
Android自带抽屉布局及NavigationView的使用

转自:https://segmentfault.com/a/1190000004151222

获取NavigationView的中的控件出现空指针异常 我们在Navigation Drawer Activity中获取控件,第一反应就是直接在onCreateView里调用findViewById,例如我想获取上图中的TextView,假如id为tv_user

TextView tv = (TextView)findViewById(R.id.tv_user);

然后给tv改下字

tv.setText("Hello world");

这时候就会报错说tv为空指针。问题引起其实非常简单,是因为在activity刚创建的时候,Dawer其实是没有打开的,所以布局没有初始化,自然也不能找到其中的空间。一般这种情况我们为了获取这类未初始布局里的空间会使用inflate方法,这里其实处理是类似的,后面会提到。

我们首先了解一下NavigationView的使用,新建一个抽屉活动后,我们可以看到主界面的布局文件是这样的

<?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>

其实这里的NavigationView就是左边抽屉拉出来后的布局了~可以看到它有两个属性app:headerLayout和app

其实这两个属性后面就分别是上图中蓝色背景部分的抽屉头和下面的菜单。要对其编辑也很简单,进入ID对应的布局修改即可。

操作1: 前面提到的获取不到控件的方法,可以在onCreate方法中这样来获取

View headerLayout = navigationView.inflateHeaderView(R.layout.nav_header_main);
tv_nav_user = (TextView)headerLayout.findViewById(R.id.tv_nav_username);

通过查看谷歌官方开发文档我们还可以发现几个方法 http://developer.android.com/reference/android/support/design/widget/NavigationView.html

这时会发现有两个头,解决方法也很简单,就是在layout文件中去掉

app:headerLayout="@layout/nav_header_main"

然后就可以获取到里面的控件愉快玩耍了~

补充: 其实如果不用上面的方法的话也是可以直接获取到header的,可以调用

View headerView = navigationView.getHeaderView(0);

来获得头部布局

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Android自带抽屉布局及NavigationView的使用
https://rehtt.com/posts/20/
作者
Rehtt
发布于
2018-02-14
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Rehtt
Hello, I'm Rehtt.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
150
分类
17
标签
73
总字数
67,772
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0

当前页面没有目录

文章目录

当前页面没有目录