我正在nestedRecyclerView,上实现onClick,onClick在子RecyclerView中,我在recyclerView的onBindViewHolder中实现它。不过,我想将它传输到一个片段中,一旦单击按钮,我就可以访问它的视图模型。
这就是我的回收商的看法
class ProductAdapter(private val context: Context, private val productModel: List<Product>) :
RecyclerView.Adapter<ProductAdapter.ProductView>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductView {
val view = LayoutInflater.from(parent.context).inflate(R.layout.product_item, parent, false)
return ProductView(view, productModel)
}
override fun getItemCount(): Int {
return productModel.size
}
override fun onBindViewHolder(holder: ProductView, position: Int) {
var product = productModel[position]
holder.product = listOf(product)
holder.setClick(object : ItemClickListener {
override fun onItemClickListener(view: View, position: Int) {
Toast.makeText(context, "" + productModel[position].productName, Toast.LENGTH_SHORT)
.show()
}
})
}
class ProductView(itemView: View, var product: List<Product>) :
RecyclerView.ViewHolder(itemView), View.OnClickListener {
private val addToCart: ImageView = itemView.findViewById(R.id.addToCart)
lateinit var listener: ItemClickListener
fun setClick(listener: ItemClickListener) {
this.listener = listener
}
init {
addToCart.setOnClickListener(this)
}
override fun onClick(v: View?) {
listener.onItemClickListener(v!!, adapterPosition)
}
}
interface ItemClickListener {
fun onItemClickListener(view: View, position: Int)
}
}发布于 2019-12-21 22:27:47
移动setClick()函数,并在适配器中公开
class ProductAdapter (private val context: Context, private val productModel:
List<Product>) :
RecyclerView.Adapter<ProductAdapter.ProductView>() {
private var listener:ItemClickListener?=null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductView {
val view = LayoutInflater.from(parent.context).inflate(R.layout.product_item, parent, false)
return ProductView(view, productModel)
}
override fun getItemCount(): Int {
return productModel.size
}
override fun onBindViewHolder(holder: ProductView, position: Int) {
val product = productModel[position]
holder.product = listOf(product)
}
public fun setClick(listener:ItemClickListener){
this.listener = listener
}
class ProductView(itemView: View, var product: List<Product>) :
RecyclerView.ViewHolder(itemView), View.OnClickListener {
val addToCart: ImageView = itemView.findViewById(R.id.addToCart)
lateinit var listener: ItemClickListener
init {
addToCart.setOnClickListener(this)
}
override fun onClick(v: View?) {
listener.onItemClickListener(v!!, adapterPosition)
}
}
interface ItemClickListener {
fun onItemClickListener(view: View, position: Int)
}
}在包含子适配器的parentAdapter中,将接口作为承包商参数传递,在ViewHolder类中,从子适配器创建实例并调用此接口
class ParentAdapter (private val listener: ItemClickListener)
{
....
....
class ViewHolder(your parameters){
var adapter = ProductAdapter (yourParameters);
adapter.setClick(object:ProductAdapter.ItemClickListener() {
override fun onItemClickListener(view: View, position: Int) {
listener.onItemClickListener(view,position)
}
});
}
}然后,您可以将片段上下文传递给parentAdapter,并在该片段中实现onItemClickListener。
https://stackoverflow.com/questions/59438937
复制相似问题