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

如何在RecyclerView的onBindViewHolder中获取点击位置并传递元素?

实现RecyclerView点击项的位置/元素传递到Fragment

1. 修改适配器的点击回调定义

先调整CustomerAdapter的回调参数类型,明确传递位置和对应元素(或仅传递位置,根据需求选择),替换掉模糊的Any?类型:

class CustomerAdapter(
    val context: Context,
    private val listImg: ArrayList<Bitmap>,
    // 改为接收位置(Int)和对应Bitmap的回调
    private val onClickFunction: ((Int, Bitmap) -> Unit)? = null
) : RecyclerView.Adapter<CustomerAdapter.MyCustomViewHolder>() {

    override fun onBindViewHolder(holder: MyCustomViewHolder, position: Int) {
        holder.customImg.setImageBitmap(listImg[position])
        holder.customImg.setOnClickListener {
            // 点击时同时传递位置和对应图片元素
            this@CustomerAdapter.onClickFunction?.invoke(position, listImg[position])
        }
    }

    // ... 其他原有代码
}

2. 在Fragment中接收位置/元素

回到AddNewHomeFragment,创建适配器时直接在lambda中获取传递过来的参数:

class AddNewHomeFragment : Fragment() {

    // ... 其他原有代码

    rv_img.layoutManager = GridLayoutManager(requireContext(),3)
   
    adapter = CustomerAdapter(requireContext(), listImg) { position, bitmap ->
        // 这里直接拿到点击项的位置position和对应的bitmap元素
        // 可根据需求使用参数,比如打印位置日志
        Log.d("AddNewHome", "点击了第 $position 个图片")
        
        var intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
        startActivityForResult(intent, IMAGE_REQUEST)
    }

    // ... 其他原有代码
}

如果只需要传递位置,只需把适配器的回调改为((Int) -> Unit)?,在onBindViewHolder中调用invoke(position),Fragment的lambda中仅接收position参数即可。

内容的提问来源于stack exchange,提问作者Captai-N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:55:12