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

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

一个很小很小的问题,如果直接在父布局上通过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不会在界面中滚动一样。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值