Android RecyclerView获取childCount数值不符预期问题咨询
为什么RecyclerView的getChildCount()返回的不是真实条目数?
嘿,这个问题我当初刚用RecyclerView的时候也踩过坑!咱们来一步步搞清楚:
首先,你得明白((LinearLayoutManager) myRecyclerView.getLayoutManager()).getChildCount()这个方法的真实作用——它只返回当前屏幕上可见的子View数量,不是整个列表的总条目数。
你看到返回4,是因为你的RecyclerView当前只能放下4个条目,剩下的6个还没被创建(RecyclerView是按需加载+复用View的,不会一次性创建所有条目),哪怕你调用了adapter.notifyDataSetChanged(),它也只会更新现有可见的View,不会提前创建屏幕外的内容,所以这个数值自然还是4。
那要怎么获取列表的真实总条目数呢?用Adapter的getItemCount()就对了!这个方法返回的是你数据源里的总条目数量,不管这些条目是否在屏幕上可见。
举个代码示例:
// 正确获取总条目数 int totalItems = myAdapter.getItemCount(); // 这里会返回你添加的10 // 获取当前屏幕可见的条目数(你之前的用法) int visibleItems = ((LinearLayoutManager) myRecyclerView.getLayoutManager()).getChildCount(); // 返回4
另外补充个小知识点:如果你想获取LayoutManager中所有已创建(包括屏幕外缓存)的ViewHolder数量,可以结合RecycledViewPool来计算:
LinearLayoutManager layoutManager = (LinearLayoutManager) myRecyclerView.getLayoutManager(); // 可见数量 + 缓存池里的数量 int createdViewCount = layoutManager.getChildCount() + myRecyclerView.getRecycledViewPool().getRecycledViewCount(0); // 这里的0是ViewType,如果你有多种类型要对应修改
不过这个一般只有调试缓存逻辑的时候会用到,你要的总条目数肯定还是Adapter的getItemCount()最靠谱。
内容的提问来源于stack exchange,提问作者TopAd Studio
相关产品推荐
相关产品推荐

