这两天在重构之前一个项目的时候发现了一个小bug,大致描述一下:
<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" />
我在这个Navigation中指明了头部布局是nav_header_main,在这个头部布局中有两个TextView,转到MainActivity中初始化用的是这段代码:
TextView tvName = (TextView) findViewById(R.id.tvName);
TextView tvStuId = (TextView) findViewById(R.id.tvStuId);
tvName.setText("姓名:" + "12");
tvStuId.setText("学号:" + "123");
运行的时候却发现出现了一个非常奇葩的异常,tvName这个对象是一个空对象,查找了相关资料后才找到解决方案,应该获取相应控件的上层父控件,从上到下逐级获取,若不按照这种方法,直接findViewById的话,是获取不到对应控件id的,所以解决方案如下:
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
TextView tvName = navigationView.getHeaderView(0).findViewById(R.id.tvName);
TextView tvStuId = navigationView.getHeaderView(0).findViewById(R.id.tvStuId);
tvName.setText("姓名:" + "12");
tvStuId.setText("学号:" + "123");
网友评论