RecyclerView仅显示1个条目,尝试网络方案无效,附完整代码求解决
问题解决方案
第一步:排查数据源问题(最高概率故障点)
你可以按以下顺序验证:
- 检查
Immeuble实体类的主键配置:确认主键idI加了@PrimaryKey(autoGenerate = true)注解。如果没有配置自动生成,每次插入数据都会用默认ID覆盖旧数据,最终数据库仅留存1条数据,自然只显示1个条目。 - 在
Adapter的setData方法中添加日志打印,验证传入的列表长度:
fun setData (immeuble: List<Immeuble>){ Log.d("调试信息", "传入的列表长度为:${immeuble.size}") this.immeubleList = immeuble notifyDataSetChanged() }
如果打印的长度为1,说明问题出在数据库的插入/查询逻辑,和RecyclerView本身无关。
- 临时插入测试数据验证:修改
setData方法手动添加测试条目,如果能显示多个条目即可确认是数据源问题:
fun setData (immeuble: List<Immeuble>){ val testList = immeuble.toMutableList() // 手动添加2条测试数据 testList.add(Immeuble(100, "测试类型1", "测试街道1")) testList.add(Immeuble(200, "测试类型2", "测试街道2")) this.immeubleList = testList notifyDataSetChanged() }
第二步:排查布局问题
如果确认数据源长度大于1,请检查布局配置:
- 尝试滑动RecyclerView:如果单条条目高度占满了全屏,会出现只能看到1条、滑动后才能看到其他条目的情况,这是因为
custom_row.xml的高度计算异常。你可以临时把custom_row.xml根布局的高度固定为100dp测试,如果能显示多个条目,调整条目内控件的约束即可:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="100dp" android:padding="24sp" android:id="@+id/rowLayout1">
- 确认RecyclerView没有嵌套在
ScrollView/NestedScrollView中,如果有嵌套需要给RecyclerView添加android:nestedScrollingEnabled="false"属性,同时将高度设为wrap_content。
第三步:排查Adapter和配置问题
- 确认你使用的
LinearLayoutManager是垂直方向(默认就是垂直,不需要额外配置,如果你手动改了水平方向也会出现单屏只显示1条的情况)。 - 检查是否有其他代码误操作了Adapter的数据,比如其他地方调用了
setData传入了长度为1的列表。
内容的提问来源于stack exchange,提问作者Fedy Belaid
相关产品推荐
相关产品推荐

