安卓开发:如何通过ID点击赛事列表卡片打开对应指定Activity
实现方案
核心修改逻辑
你当前代码中所有卡片点击详情都是跳转同一个DetailActivity,只要根据卡片的位置/赛事特征判断跳转目标即可。RecyclerView的项位置默认从0开始计数,正好匹配你要的「第1张(position=0)跳ActivityDetailOne、第2张跳ActivityDetailTwo、第3张跳ActivityDetailThree」的需求。
方案1:按位置跳转(最简单,适合固定3场赛事的场景)
找到MyViewHolder类里bind方法中的btnDetail.setOnClickListener代码块,直接替换为以下内容即可:
btnDetail.setOnClickListener { // 获取当前卡片的位置,默认从0开始计数 val currentPosition = adapterPosition // 根据位置匹配跳转的Activity val targetActivity = when(currentPosition) { 0 -> ActivityDetailOne::class.java 1 -> ActivityDetailTwo::class.java 2 -> ActivityDetailThree::class.java // 防止越界的默认配置,你只有3条数据可以不用修改 else -> ActivityDetailOne::class.java } val intent = Intent(context, targetActivity) // 如果需要往详情页传赛事数据,可以加额外参数,比如传赛事ID: // intent.putExtra("match_id", match.id.toString()) startActivity(intent) }
方案2:按赛事特征跳转(更稳定,推荐)
如果之后你可能调整赛事排序,用位置判断会出错,可以直接根据赛事队伍属性匹配跳转,逻辑更稳妥:
btnDetail.setOnClickListener { val targetActivity = when { // 切尔西vs曼城的赛事跳第一个详情页 match.firstCommand == "Chelsea" && match.secondCommand == "Manchester City" -> ActivityDetailOne::class.java // 埃弗顿vs诺维奇的赛事跳第二个详情页 match.firstCommand == "Everton" && match.secondCommand == "Norvich City" -> ActivityDetailTwo::class.java // 布伦特福德vs利物浦的赛事跳第三个详情页 match.firstCommand == "Brentford" && match.secondCommand == "Liverpool" -> ActivityDetailThree::class.java else -> ActivityDetailOne::class.java } val intent = Intent(context, targetActivity) startActivity(intent) }
注意事项
- 请确保你创建的
ActivityDetailOne、ActivityDetailTwo、ActivityDetailThree三个Activity已经在项目的AndroidManifest.xml中完成注册,否则跳转时会触发崩溃。 - 如果需要在详情页展示对应赛事的信息,可以在Intent中携带赛事ID/其他字段,在详情页通过
intent.getStringExtra("match_id")这类方法即可获取传递的数据。
内容的提问来源于stack exchange,提问作者Yotaka Yomoto
相关产品推荐
相关产品推荐

