点击带RecyclerView.Adapter的Fragment列表项无法跳转至另一Fragment
问题根因
- 未给
MovieListAdapter的ItemClickListener实例赋值,调用itemclick?.onItemClick()时因为itemclick为空,点击逻辑直接不执行 - 点击事件仅绑定到条目中的子RecyclerView
rvActor,既存在子控件消费触摸事件导致点击不触发的问题,也无法响应条目其他区域的点击操作
修复方案
步骤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
相关产品推荐
相关产品推荐

