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

Kotlin中实现RecyclerView条目点击跳转对应独立Activity的方法

RecyclerView条目点击跳转对应独立Activity实现方案

步骤1:扩展ItemsViewModel类

给ItemsViewModel新增字段,存储当前条目对应的目标Activity类,明确每个条目的跳转目标:

// 扩展后的ItemsViewModel
data class ItemsViewModel(
    val image: Int,
    val text: String,
    val targetActivity: Class<*> // 新增:绑定对应Activity的Class对象
)

步骤2:修改RecyclerView页面代码(recyclerView.kt)

填充数据时,为每个条目指定对应的Activity(需提前创建好目标Activity并在Manifest中注册):

class RecyclerViewActivity : AppCompatActivity() { // 类名首字母大写,符合Kotlin编码规范
    private lateinit var binding: ActivityRecyclerViewBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityRecyclerViewBinding.inflate(layoutInflater)
        setContentView(binding.root)
        supportActionBar?.hide()

        // 设置垂直布局管理器
        binding.recyclerview.layoutManager = LinearLayoutManager(this)

        // 填充数据,绑定每个条目对应的Activity
        val data = ArrayList<ItemsViewModel>()
        data.add(ItemsViewModel(R.drawable.jumping_jack, "开合跳", JumpingJackActivity::class.java))
        data.add(ItemsViewModel(R.drawable.jumping_aquats, "跳跃深蹲", JumpingSquatActivity::class.java))

        // 绑定适配器到RecyclerView
        val adapter = CustomAdapter(data)
        binding.recyclerview.adapter = adapter
    }
}

步骤3:修改适配器的点击事件逻辑(CustomAdapter.kt)

在条目点击事件中,通过ItemsViewModel存储的Activity类启动对应页面:

class CustomAdapter(private val mList: List<ItemsViewModel>) : RecyclerView.Adapter<CustomAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.card_view_design, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val item = mList[position]
        holder.imageView.setImageResource(item.image)
        holder.textView.text = item.text

        // 条目点击跳转逻辑
        holder.itemView.setOnClickListener {
            val context = holder.itemView.context
            val intent = Intent(context, item.targetActivity)
            context.startActivity(intent)
        }
    }

    override fun getItemCount(): Int {
        return mList.size
    }

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val imageView: ImageView = itemView.findViewById(R.id.imageview)
        val textView: TextView = itemView.findViewById(R.id.textView)
    }
}

推荐:解耦式写法(避免适配器依赖Activity)

如果想让适配器更通用,可通过Lambda回调将点击事件抛给Activity处理:

1. 修改适配器构造,添加回调参数

class CustomAdapter(
    private val mList: List<ItemsViewModel>,
    private val onItemClick: (ItemsViewModel) -> Unit // 点击回调Lambda
) : RecyclerView.Adapter<CustomAdapter.ViewHolder>() {

    // onCreateViewHolder、getItemCount、ViewHolder代码不变

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val item = mList[position]
        holder.imageView.setImageResource(item.image)
        holder.textView.text = item.text

        holder.itemView.setOnClickListener {
            onItemClick(item) // 触发回调
        }
    }
}

2. 在Activity中处理跳转

class RecyclerViewActivity : AppCompatActivity() {
    // 初始化代码不变

    override fun onCreate(savedInstanceState: Bundle?) {
        // ...其他逻辑不变

        val adapter = CustomAdapter(data) { item ->
            // 在Activity中处理跳转逻辑
            startActivity(Intent(this, item.targetActivity))
        }
        binding.recyclerview.adapter = adapter
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:24:43