Kotlin RecyclerView点击监听器失效,点击事件未触发求助
RecyclerView行点击事件不触发的排查与解决
可能原因及对应解决方法:
子View抢占点击事件
检查你的card_layout.xml里的ImageView、TextView等子控件,是否设置了android:clickable="true"或android:focusable="true"。这些属性会让子控件优先消耗点击事件,导致父布局(itemView)的点击监听器收不到事件。
解决:- 把子控件的
clickable和focusable设为false; - 或者在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
相关产品推荐
相关产品推荐

