频道栏目
首页 > 资讯 > 其他 > 正文

为Navigation Header上的控件添加监听事件

17-02-23        来源:[db:作者]  
收藏   我要投稿

一个很小很小的问题,如果直接在父布局上通过id来查找到相应的控件来进行操作,会抛出空指针的错误,我估计是因为抽屉都还没有打开,系统不能监视到抽屉内的东西。

而解决方法也很简单,先找到navigation这一控件并赋予变量比如navigationView,然后在view中使用getHeaderView(0)来获取到header这一控件,然后在header中通过id来找到要监听的控件。这样的处理就很自然,因为系统是可以找到navigation这一控件的,而header正是navigation中设置的一部分,header也是我们需要监听控件的父控件,于是在header中寻找就不会发生相应的错误。

View headerView = navigationView.getHeaderView(0);
        TextView Login = (TextView) headerView.findViewById(R.id.Login);
        Login.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // 点击后逻辑事件
            }
        });

当然上述的方法是已经在XML里的navigation中设置了header后进行的。

如果没有在XML中设置header,我们还可以通过navigation的inflateHeader来动态加载header文件,这个函数也会返回相应的View值,我们获取到这个值后,就可以找到我们需要监听的控件了。

思考

其实,也就是自己对于父控件的一种小感悟,在动态加载RecyclerView的时候,我们都知道我们在最后一个参数是使用false的,那个时候,书上说以后等理解深了自然会懂,为什么设置成false不成为父控件。

最近在翻译Material Design中也有一句话,父控件可以限制子控件的运动,我现在对于false的理解是,如果设置了父控件的话,在滚动过程中,其实父控件,可能是不运动的,这样会导致RecyclerView不能滚动,就像FAB不会在界面中滚动一样。

相关TAG标签
上一篇:通过ContentProvider拿到手机所有短信
下一篇:android 自定义控件之ViewGroup生命周期执行步骤
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站