【问题标题】:RecyclerView calling setTextColor for one Item affects other ItemsRecyclerView 为一个 Item 调用 setTextColor 会影响其他 Item
【发布时间】: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,但我不确定它为什么会这样做。

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

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

    【讨论】:

    • 我没有,我做了一些搜索,但还没有找到明确的实现。如果可能的话,你能给我一个例子吗?
    • 可能是this?,简单来说就是视图被回收用于各种数据。视图颜色一旦更改,它将保留该颜色,直到再次更改。如果新数据绑定到视图持有者,它将显示设置的颜色。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 2014-09-12
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多