You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Kotlin RecyclerView复用功能失效问题求助

RecyclerView复用失效、重复显示第0条目的解决方案

你的问题核心是RecyclerView滚动时未正确复用视图并绑定对应位置数据,导致重复显示第0个条目。以下是针对性排查和修复步骤:

1. 修复布局中的无效约束属性

你的card_view.xml里,CardView使用了app:layout_constraintBottom_toBottomOf等ConstraintLayout专属属性,但CardView的父布局是LinearLayout,这些约束完全无效,可能导致布局测量异常,干扰RecyclerView的复用逻辑。删除这些无效属性:

<!-- 修改后的CardView代码 -->
<androidx.cardview.widget.CardView
    android:id="@+id/quest"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    app:cardElevation="16dp"
    android:layout_margin="10dp"
    android:padding="10dp"
    app:cardBackgroundColor="#FBEFCA"
    app:cardCornerRadius="10dp">

2. 确保ItemsViewModel的定义正确

检查ItemsViewModel类,必须保证每个实例的属性独立,建议使用数据类:

data class ItemsViewModel(
    val icon: Int,
    val title: String,
    val description: String,
    val lock: String
)

若不是数据类,需确保构造函数正确初始化每个属性,避免引用共享。

3. 移除多余的刷新代码

MainActivity中adapter.notifyDataSetChanged()是多余的,设置adapter时RecyclerView会自动触发数据刷新,移除这行代码:

// 移除下面这行
adapter.notifyDataSetChanged()

4. 验证数据数组的正确性

检查strings.xml中的list_title、list_description、list_lock数组,确保每个位置的元素唯一,无最后几个元素与第0个元素重复的情况。同时确认icons数组的17个资源ID对应正确图片。

5. 显式指定LinearLayoutManager的方向

虽然默认是垂直方向,但显式设置可避免潜在的布局管理器配置问题:

binding.recyclerview.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)

6. 检查布局测量是否正常

在开发者选项中开启「显示布局边界」,滚动RecyclerView查看每个item的布局边界是否正确,确保无item高度异常或重叠情况。

完成以上步骤后重新运行程序,RecyclerView的复用功能应恢复正常,滚动时会正确绑定对应位置的数据,不再重复显示第0个条目。

内容的提问来源于stack exchange,提问作者VuciuS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:17:33