上面这种做法会报错
会报空指针异常,因为你刚刚进入这个 Activity 或者 Fragment 的时候还没有加载完此 View 所以我们要加一个判断,代码如下:
rv_subject.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver
.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// 默认选中第一个
View view = manager.findViewByPosition(0);
RelativeLayout relativeLayout = (RelativeLayout)view; //获取布局中任意控件对象
TextView subjectName = relativeLayout.findViewById(R.id.tv_subject_name);
LinearLayout subjectBag = relativeLayout.findViewById(R.id.rl_subject);
subjectName.setTextSize(14);
subjectName.getPaint().setFakeBoldText(true);
subjectBag.setBackgroundResource(R.drawable.bag_subject_item_selected);
}
});
还要注意一点是,上面这串代码的位置一定要放正确,要不也会报错,提示没有这个方法,所放的位置为,你找到该控件的下面,代码如下:
public void initView() {
subjectArray = getContext().getResources().getStringArray(R.array.subjects);
rv_subject = view.findViewById(R.id.rv_subject);
rv_subject.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver
.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// 默认选中第一个
View view = manager.findViewByPosition(0);
RelativeLayout relativeLayout = (RelativeLayout)view; //获取布局中任意控件对象
TextView subjectName = relativeLayout.findViewById(R.id.tv_subject_name);
LinearLayout subjectBag = relativeLayout.findViewById(R.id.rl_subject);
subjectName.setTextSize(14);
subjectName.getPaint().setFakeBoldText(true);
subjectBag.setBackgroundResource(R.drawable.bag_subject_item_selected);
}
});
总结
最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
相信它会给大家带来很多收获:
上述【高清技术脑图】以及【配套的架构技术PDF】可以关注我免费获取
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。