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

点击带RecyclerView.Adapter的Fragment列表项无法跳转至另一Fragment

问题根因
  • 未给MovieListAdapter的ItemClickListener实例赋值,调用itemclick?.onItemClick()时因为itemclick为空,点击逻辑直接不执行
  • 点击事件仅绑定到条目中的子RecyclerViewrvActor,既存在子控件消费触摸事件导致点击不触发的问题,也无法响应条目其他区域的点击操作
修复方案

步骤1:给MovieListAdapter添加监听器设置方法

在MovieListAdapter类中新增设置监听器的公开方法:

fun setOnItemClickListener(listener: ItemClickListener) {
    this.itemclick = listener
}

步骤2:在FragmentMovieList中传入监听器实例

修改FragmentMovieList的onViewCreated逻辑,将实现了ItemClickListener的宿主Activity传入Adapter:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    recycler =  view.findViewById(R.id.rvActors)
    val listAdapter = MovieListAdapter()
    // 传入监听器实例
    listAdapter.setOnItemClickListener(requireActivity() as MovieListAdapter.ItemClickListener)
    recycler?.adapter = listAdapter
}

步骤3:调整点击事件绑定对象

修改MovieListAdapter的onBindViewHolder逻辑,将点击事件绑定到整个条目的根布局itemView,删除原有的rvActor点击绑定逻辑:

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val movie = list[position]
    // 原有UI赋值逻辑保持不变
    // 替换点击绑定逻辑
    holder.itemView.setOnClickListener {
        itemclick?.onItemClick()
    }
}
可选优化建议

可以用ContextCompat.getDrawable(context, 资源ID)代替原生getDrawable方法,不需要额外判断Android版本,兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:27:03