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

Kotlin RecyclerView点击监听器失效,点击事件未触发求助

RecyclerView行点击事件不触发的排查与解决

可能原因及对应解决方法:

  • 子View抢占点击事件
    检查你的card_layout.xml里的ImageView、TextView等子控件,是否设置了android:clickable="true"或android:focusable="true"。这些属性会让子控件优先消耗点击事件,导致父布局(itemView)的点击监听器收不到事件。
    解决:

    1. 把子控件的clickable和focusable设为false;
    2. 或者在item的根布局添加android:descendantFocusability="blocksDescendants",强制让根布局接收点击事件。
  • Adapter未正确绑定点击监听器
    确认在创建Adapter实例时,是否正确传递了OnItemClickListener的实现。比如在Activity/Fragment中:

    // 示例:Activity实现OnItemClickListener接口
    class YourActivity : AppCompatActivity(), RecyclerAdapter.OnItemClickListener {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
            recyclerView.adapter = RecyclerAdapter(this) // 传入当前实现了接口的Activity作为listener
        }
    
        override fun OnItemClick(position: Int) {
            // 处理点击逻辑
        }
    }
    
  • Item布局根视图不可点击
    检查card_layout.xml的根布局是否设置了android:clickable="false",如果有,改成android:clickable="true"(默认根布局可点击,除非手动设置为false)。

代码小优化:

你的ViewHolder里的onClick方法中,println里的$position属于未定义的变量,可改为使用absoluteAdapterPosition:

override fun onClick(v: View?) {
    val position = absoluteAdapterPosition
    println("bouton pushed ------------ $position ***************************")
    listener.OnItemClick(position)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:53:10