RecyclerView点击项ID及信息传递至Activity失败,请求协助排查
问题修复方案
核心问题:传递了View的ID而非电影ID
你在点击事件里错误地获取了holder.itemView.id——这是列表项布局控件的ID,完全不是你需要的电影ID,这直接导致详情页拿不到正确的电影数据。
具体修复步骤
1. 修正点击事件的数据传递
把点击逻辑里的ID替换为当前电影项的真实ID,同时可以一次性传递所有需要的字段:
holder.itemView.setOnClickListener { val currentMovie = mylist[position] val intent = Intent(holder.binding.root.context, DetailsActivity::class.java).apply { putExtra("MOVIE_ID", currentMovie.id) putExtra("MOVIE_TITLE", currentMovie.title) putExtra("MOVIE_OVERVIEW", currentMovie.overview) putExtra("MOVIE_POSTER", currentMovie.poster_path) // 按需添加genres、runtime等其他字段 } // 适配非Activity环境启动的情况 if (holder.binding.root.context !is Activity) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } holder.binding.root.context.startActivity(intent) }
2. 优化列表更新逻辑
当前setSomeList方法会直接追加数据,多次调用会导致列表重复,建议先清空原有数据:
fun setSomeList(list: MutableList<MovieAndDetailsUi>) { mylist.clear() mylist.addAll(list) notifyDataSetChanged() }
3. 规避分类字段空指针风险
你直接取genres.get(0).name,如果某部电影没有分类数据会崩溃,加个空判断:
binding.genreTv.text = if (recyclerViewItem.genres.isNotEmpty()) { recyclerViewItem.genres[0].name } else { "未知类型" }
详情页接收数据示例
在DetailsActivity里这样获取传递的参数:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 初始化布局... val movieId = intent.getIntExtra("MOVIE_ID", -1) val movieTitle = intent.getStringExtra("MOVIE_TITLE") ?: "未知标题" val movieOverview = intent.getStringExtra("MOVIE_OVERVIEW") ?: "暂无简介" // 使用数据展示详情 }
内容的提问来源于stack exchange,提问作者Alex20280
相关产品推荐
相关产品推荐

