RecycleView 获取第一个可见条目(掉坑篇)

RecycleView 获取第一个可见条目(掉坑篇)

问题描述

今天本来心情很愉快的,因为需求是酱样子的,扫了一眼马上用我的核桃仁处理器,迅速定位–>直接就RecycleView嵌套RecycleView呀,简单粗暴我喜欢。
(签到跟签退之间的View,测量每个子item的高度,然后动态赋值给这个View)

这里写图片描述

然后我就笑不出来了,因为什么呢,开始的item数量少,当数据多了,屏幕显示不完,拉下去之后就Crash了!WTF!

这里写图片描述

说我这个对象不存在,到底为什么会出现这种情况?百度一下–>RecyclerView有良好的回收机制,所以只加载屏幕显示的View,未显示部分将回收。由于getChildAt()这个方法只能get到屏幕显示的部分,也就是说:假如屏幕上只能显示5个View,当往下滑动到第6、7个View的时候,他们的position虽然还是5,6但是由于getChildAt()只能get到屏幕上显示的View,所以它实际的position其实是4、5。想要get到第6个View不能用getChildAt(6)而要用getChildAt(4)

解决方法

其实这问题之前在ListView中也出现过,不过只需要用当前的position减去屏幕显示的第一个View的position(getFirstVisiblePosition())就行。
RecycleView中没有这个方法,But可以有这个方法

 final LinearLayoutManager layoutManager = new LinearLayoutManager(mContext);
 layoutManager.findFirstVisibleItemPosition()//获取第一个先是的View的索引

使用recycleView中的 position – 显示view的索引即可

以下是我解决问题的办法

    @Override
    public void onBindViewHolder(final ViewHoldX holder,  int position) {
        final int S = position;
        final LinearLayoutManager layoutManager = new LinearLayoutManager(mContext);
        holder.recycler_view.setLayoutManager(layoutManager);
        OneAdapter oneAdapter = new OneAdapter(mContext, mList.get(position).getFruitBeen());
        holder.recycler_view.setAdapter(oneAdapter);
        fruitBeen = mList.get(position).getFruitBeen();
        holder.recycler_view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                View childAt = layoutManager.getChildAt(S - layoutManager.findFirstVisibleItemPosition());
                if (childAt !=null){
                    height = childAt.getHeight();
                }
                int x = height * fruitBeen.size();
                ViewGroup.LayoutParams params = holder.view1.getLayoutParams();
                params.height = x;
                holder. view1.setLayoutParams(params);
            }
        });
    }

每天进步一点点

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2851.html原文链接:https://javaforall.net

(0)
上一篇 2021年3月12日 下午10:52
下一篇 2021年3月12日 下午10:52


相关推荐

  • 05-ES6语法:解构赋值

    05-ES6语法:解构赋值本文介绍了 ES6 中解构赋值 ES6 的解构赋值语法是一种 JS 表达式 解构赋值语法是一种 JS 表达式 通过解构赋值 可以将属性 值从对象 数组中取出 赋值给其他变量 使用了大量了代码片段介绍了具体的使用方式 并且配上了屏幕录音进行详细解说

    2026年3月19日
    2
  • 复试–矩阵行列对角和

    复试–矩阵行列对角和

    2021年5月19日
    158
  • AD15中PCB设置NET CLASS规则

    AD15中PCB设置NET CLASS规则1,执行菜单命令设计-类或者快捷命令DC计入如下界面2,右键新建一个类类)X*O-K,M9}0C6v3,吧电源和GND网络都加载到右边,PWR类创建完毕 4,这时候在规则里面就可对这个类进行调用和约束…

    2022年7月16日
    17
  • 风控决策引擎经验

    风控决策引擎经验转载自https://mp.weixin.qq.com/s/LDcquVOTlCKJluyWG3AGAA一套完整的风控体系,在风控中,少不了决策引擎,今天就浅谈一下风控决策引擎。一、优先级风控决策引擎是一堆风控规则的集合,通过不同的分支、层层规则的递进关系进行运算。而既然是组合的概念,则在这些规则中,以什么样的顺序与优先级执行便额外重要。风控系统的作用在于识别绝对风控与标识相对风险…

    2022年6月15日
    52
  • 如何辨认正版mt4_真假鉴别软件

    如何辨认正版mt4_真假鉴别软件在全球零售外汇行业,外汇经纪商使用最多的还是俄罗斯迈达克公司的MT4交易平台,一些不合规的外汇经纪商也对MT4十分热衷,这使市场上几千块一个的盗版MT4日益猖獗,致使一部分交易者因此遭受一些不必要的利益侵害。那么MT4。fOrex6。cc的特点是什么?如何判别一个MT4软件是否是盗版?今天就带你们辨别真假MT4.MT4的优势1.强大的工作表现MT4强大的工作表现,这一点是毋庸置疑的。MT4自2005年7月1日推出以来,就不断的获得市场的认可。下单灵活、界面友好、交易直观等这些都是MT4平台成为外汇市场

    2022年4月19日
    75
  • 15款android设备上的代码编辑器

    15款android设备上的代码编辑器如果你希望你的Android设备,如智能手机和平板电脑,在任何时间和任何地方都能够编写代码,那么,不妨看看下面我将介绍的15款Android代码编辑器,它们必将成为你的理想工具。1.DeuterIDE一款基于移动开发的文本编辑器,在线编译器,内置支持Android的集成开发环境。它的虚拟按键可提供常用的编程符号和语法高亮功能,并支持超过40种编程语言,从而能让你在旅途中写代码变得从未如此简单。

    2022年6月16日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号