RecyclerView 为一个 Item 调用 setTextColor 会影响其他 Item

Posted

技术标签:

【中文标题】RecyclerView 为一个 Item 调用 setTextColor 会影响其他 Item【英文标题】:RecyclerView calling setTextColor for one Item affects other Items 【发布时间】:2022-01-14 19:01:20 【问题描述】:

不确定是否有人发生过这种情况,但是当我为 RecycleView 中的某个项目(childView)更改某些内容时,同样适用于下方/上方的项目 12 位置。有人对此有任何见解吗?

    override fun onInterceptTouchEvent(view: RecyclerView, e: MotionEvent): Boolean 
        val childView = view.findChildViewUnder(e.x, e.y)

        if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) 
            val letterOfDay = childView.findViewById<TextView>(R.id.letterOfDay)
            val dayOfMonth = childView.findViewById<TextView>(R.id.dayOfMonth)
            val dayOfMonthActive = childView.findViewById<ImageView>(R.id.button)

            dayOfMonthActive.visibility = View.VISIBLE
            letterOfDay.setTextColor(Color.parseColor("#ffffff"))
            dayOfMonth.setTextColor(Color.parseColor("#001419"))

            mListener.onItemClick(childView, view.getChildAdapterPosition(childView))
            return true
        
        return false
    

因此,此代码为相隔 12 个位置的 2 个不同项目设置文本颜色。它被调用了一次,我认为它与 RecyclerView 有关。

编辑:当我打电话时

recyclerView.findChildViewUnder(1f,1f)

view.findChildViewUnder(e.x, e.y)

它并没有精确到单个子视图,而是针对我的情况下的 2,但我不确定它为什么会这样做。

【问题讨论】:

【参考方案1】:

在触摸事件中,您正在为视图持有者中表示的视图设置颜色。当视图持有者被重用并反弹时,您是否正在重置颜色?如果没有,那么您将在一个视图持有者中看似动作的内容神奇地出现在另一个远方视图持有者中。

【讨论】:

我没有,我做了一些搜索,但还没有找到明确的实现。如果可能的话,你能给我一个例子吗? 可能是this?,简单来说就是视图被回收用于各种数据。视图颜色一旦更改,它将保留该颜色,直到再次更改。如果新数据绑定到视图持有者,它将显示设置的颜色。

以上是关于RecyclerView 为一个 Item 调用 setTextColor 会影响其他 Item的主要内容,如果未能解决你的问题,请参考以下文章

如何彻底更改 recyclerview 中的 item 布局中的某个控件的某个属性

从头开始学 RecyclerView 添加item点击事件

RecyclerView Item Android Studio的弹出菜单功能

recyclerview23+出现多个item只显示第一个item的问题

为 RecyclerView-Item 创建选项菜单

Android:RecyclerView中添加Item点击事件