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

RecyclerView滚动正常但onItemClick方法不触发的问题排查

问题解决:RecyclerView列表项点击事件无响应

核心问题定位

你的Adapter代码中存在一处明显错误,导致点击事件被无效拦截:
在onBindViewHolder方法里,你给TextView设置了一个错误的点击监听器,这行代码不仅没有触发预期的点击逻辑,还会消耗掉列表项的点击事件:

holder.textView.setOnClickListener{listener}

这里的lambda表达式只是返回了listener对象,没有执行任何实际的点击回调逻辑,同时因为TextView可能占满了整个列表项布局,点击事件被TextView接收后没有任何响应,进而导致ViewHolder中给itemView设置的正确点击监听无法触发。

修复步骤

  1. 删除错误的点击监听代码
    直接移除onBindViewHolder中的holder.textView.setOnClickListener{listener}这一行代码。

  2. (可选)确保列表项布局中的子控件不抢占焦点
    检查你的fragment_meditation_recyclerview_row.xml布局文件,确保TextView的属性设置不会拦截点击事件:

    <TextView
        android:id="@+id/gmrowtextview"
        ...
        android:focusable="false"
        android:clickable="false" />
    

    这一步是为了避免子控件消耗点击事件,确保整个列表项的点击事件能被ViewHolder中设置的监听器接收。

  3. 验证代码逻辑
    修复后,ViewHolder中给itemView设置的点击监听器会正常工作:

    inner class ViewHolder(view: View): RecyclerView.ViewHolder(view), View.OnClickListener{
        val textView: TextView = view.findViewById(R.id.gmrowtextview)
        init {
            view.setOnClickListener(this)
        }
        override fun onClick(v: View?) {
            val position = bindingAdapterPosition
            if (position != RecyclerView.NO_POSITION){
                listener.onItemClick(position)
            }
        }
    }
    

    当点击列表项时,会正确获取当前位置并调用Activity中实现的onItemClick方法,触发跳转和Toast提示。

额外说明

你的Activity代码逻辑没有问题,传递给Adapter的this(即Activity本身,已实现RecyclerViewEvent接口)是正确的,修复Adapter的错误后即可正常响应点击事件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:33:17