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

Android Studio(Kotlin)中RecyclerView滚动变色:为何if语句需加else?

RecyclerView滚动时颜色丢失的原因及解决

这问题核心是RecyclerView的ViewHolder复用机制在搞鬼:

RecyclerView不会为每个item都创建新的ViewHolder,当item滑出屏幕,它的ViewHolder会被回收,用来展示新滑入屏幕的item。你的初始代码只在status<=2时给item设置深色,但如果复用的ViewHolder之前绑定的是status<=2的item(已经被改成深色),现在新绑定的是status>2的item,代码里没做任何处理,这个ViewHolder就会带着之前的深色显示,不会自动恢复xml里默认的绿色,这就是你看到的“颜色丢失”。

初始代码:

if(dataSet[position].status<=2) { //The default color (R.color.green) is set in xml
    val color = ContextCompat.getColor(context, R.color.primaryDarkColorInactive)
    viewHolder.item.setBackgroundColor(color)
}

修正后的代码之所以能解决问题,是因为它不管条件是否满足,都会明确设置对应的颜色:

val colorRes = if (dataSet[position].status <= 2) {
    R.color.primaryDarkColorInactive
} else {
    R.color.green
}
val color = ContextCompat.getColor(context, colorRes)
viewHolder.item.setBackgroundColor(color)

这样复用ViewHolder时,新的颜色会完全覆盖之前的状态,不会有旧颜色残留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:12:05