android获取navigationview 上的控件id

这两天在重构之前一个项目的时候发现了一个小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");
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页