android-fragments 如何通过包将数据从适配器传递到Kotlin中的片段?

i86rm4rw  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(180)

我一直在尝试将数据(用户的电子邮件和电话)从我的适配器传递到我的片段。从我在网上读到的,我应该使用一个接口,但我不能。我想使用包。有人能解释一下我应该如何通过包传递数据,以及如何在片段中接收数据吗?下面是我的适配器。

class ProductAdapter(
    private val onItemClick: (item: ProductResultData) -> Unit,
    private val items: List<ProductResultData>
): RecyclerView.Adapter<ProductAdapter.ProductViewHolder>() {

    lateinit var context: Context

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductViewHolder {

        context = parent.context

        val binding: ProductItemDataBinding = DataBindingUtil.inflate(
            LayoutInflater.from(parent.context),
            R.layout.rv_product _item,
            parent,
            false)

        return ProductViewHolder(binding)
    }

    override fun onBindViewHolder(holder: ProductViewHolder, position: Int) {
        val productItem = items[position]
        holder.bindItem(productItem,context)
    }

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

    inner class ProductViewHolder(private val binding: ProductItemDataBinding): RecyclerView.ViewHolder(binding.root){

        @SuppressLint("SetTextI18n")
        fun bindItem(item: ProductResultData, context: Context){

            
            Glide.with(context)
                .load(R.drawable.img_kitchen)
                .placeholder(R.drawable.garden_kit)
                .into(binding.ivGardenKit)

            binding.tvProductName.text = item.product_name
           binding.tvPrice.text = "₹" +" "+item.price.toString() + "/ Kit"
            binding.tvProductDetails.text = item.about_product
           binding.cvProducts.setOnClickListener {

               onItemClick.invoke(item)
        }

        }
    }

}
ahy6op9u

ahy6op9u1#

你的适配器代码看起来是正确的。首先,无论何时你有一个lambda参数,它必须被设置为列表的最后一个。

class ProductAdapter(
  private val items: List<ProductResultData
  private val onItemClick: (ProductResultData) -> Unit
)

// In your activity/fragment
binding.recyclerView.adapter = ProductAdapter(list) { item ->
  Bundle().apply {
    putParcelable("PRODUCT_ITEM", item)
  }.also {
    val yourFrag = YourFragment()
    yourFrag.args = it
    replaceFragment(yourFrag)
  }
}

并确保您的ProductResultData实现了Parcelable接口。

相关问题