Android——RecycleView获取第 i 个 item 里面的控件并进行赋值
程序员文章站
2022-03-22 16:32:50
...
今天些项目的时候遇到了这样的问题,我想要操作 RecycleView 中某个 item 里面的子控件,通过度娘找到了一些方法,但是感觉都不全,下面整理一下:
直接上代码:
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);
上面这种做法会报错
会报空指针异常,因为你刚刚进入这个 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);
}
});
}
以上就是我的总结
附上参考博主链接: https://blog.csdn.net/d06110902002/article/details/68495853?utm_source=blogxgwz8
上一篇: 批处理bat计算前N个月第一天的日期
下一篇: 用批处理修改日期 然后在改回来