如何在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
相关产品推荐
相关产品推荐

