RecyclerView.Adapter 点击 kotlin
时间: 2023-12-17 22:56:31 浏览: 151
要在 RecyclerView.Adapter 中实现点击事件,可以按照以下步骤:
1. 在 Adapter 中定义一个接口 OnClickListener,接口中定义一个方法 onItemClicked(position: Int)。
2. 在 Adapter 中定义一个变量 listener: OnClickListener?,用于保存监听器。
3. 在 onCreateViewHolder 方法中为 itemView 设置监听器,例如:
```
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.item_view, parent, false)
val viewHolder = ViewHolder(itemView)
itemView.setOnClickListener {
listener?.onItemClicked(viewHolder.adapterPosition)
}
return viewHolder
}
```
4. 在 Activity 或 Fragment 中实现 OnClickListener 接口,并重写 onItemClicked 方法。
5. 在 Activity 或 Fragment 中创建 Adapter 实例时,通过 setListener 方法将 OnClickListener 传递给 Adapter。
完整的代码示例:
```
class MyAdapter(private val itemList: List<String>) : RecyclerView.Adapter<MyAdapter.ViewHolder>() {
private var listener: OnClickListener? = null
interface OnClickListener {
fun onItemClicked(position: Int)
}
fun setListener(listener: OnClickListener) {
this.listener = listener
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.item_view, parent, false)
val viewHolder = ViewHolder(itemView)
itemView.setOnClickListener {
listener?.onItemClicked(viewHolder.adapterPosition)
}
return viewHolder
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.itemView.titleTextView.text = itemList[position]
}
override fun getItemCount() = itemList.size
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
}
```
在 Activity 或 Fragment 中:
```
class MainActivity : AppCompatActivity(), MyAdapter.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val itemList = listOf("Item 1", "Item 2", "Item 3")
val adapter = MyAdapter(itemList)
adapter.setListener(this)
recyclerView.adapter = adapter
recyclerView.layoutManager = LinearLayoutManager(this)
}
override fun onItemClicked(position: Int) {
Toast.makeText(this, "Item $position clicked", Toast.LENGTH_SHORT).show()
}
}
```
阅读全文