[Android开发] RecyclerView的Adapter不调用onCreateViewHolder和onBindViewHolder

问题描述

在数据源不为空、adapter中getItemCount返回正确条目数的情况下。RecyclerView不刷新数据。通过断点调试发现没有调用onCreateViewHolder和onBindViewHolder两个方法。

发现过程

查阅了很多帖子,发生这种问题主要集中在三种情况:
1、数据源为空
2、getItemCount返回0
3、没有设置layoutManager
我的代码没有出现以上问题,仍然不掉用两个方法。

之后查阅到一些帖子,说可能是RecyclerView嵌套在ScrollView中,导致空间测量错误。使得RecyclerView测得的可用空间为0,不创建item,表现为空白。
虽然我没有使用ScrollView,但是应该排查一下“控件测量导致的错误”

使用查看控件树,发现在RecyclerView上方处于同一层的Linerlayout积压了RecyclerView的空间。
原来是定义ToolBar时,将其父控件的height写成了match_parent。非常低级的错误。


Linearlayout 占据了整个画布,使得RecyclerView没有了空间
image.png

解决

改成wrap_content后,Linearlayout高度正常。RecyclerView正确刷新。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
空间重新分布,正常显示

总结

在进行宽高的定义时,一定要慎重。许多依赖空间测量的过程可能会因为一个随意定义的参数而出现错误。并且此类错误比较难排查。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容