欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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