Android --- RecycleView获取第 i 个 item 里面的控件并进行赋值

72 阅读2分钟

上面这种做法会报错

会报空指针异常,因为你刚刚进入这个 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】可以关注我免费获取

Android学习PDF+架构视频+面试文档+源码笔记

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。