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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:06:24