【发布时间】:2019-05-18 09:13:35
【问题描述】:
我有一个带有内部支架类的简单适配器。
我尝试以这种方式在项目点击监听器上实现,但它不起作用:
class ThemeAdapter(private val callback: (position: Int) -> Unit) : RecyclerView.Adapter<ThemeAdapter.ThemeHolder>() {
private lateinit var themeList: Array<String>
override fun getItemCount(): Int {
return themeList.size
}
fun setThemes(themes: Array<String>) {
themeList = themes
notifyDataSetChanged()
}
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ThemeHolder {
val inflater = LayoutInflater.from(viewGroup.context)
return ThemeHolder(inflater.inflate(R.layout.cell_library_themes, viewGroup, false))
}
override fun onBindViewHolder(holder: ThemeHolder, position: Int) {
holder.bind(themeList[position])
}
inner class ThemeHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
private var theme: TextView = itemView.spinner_library_dropdown
fun bind(themeName: String) {
theme.text = themeName
}
override fun onClick(v: View?) {
Timber.e("OnClick!")
callback.invoke(adapterPosition)
}
}
}
木材日志什么的。
解决起来很简单:
fun bind(themeName: String) {
theme.text = themeName
itemView.setOnClickListener {
Timber.e("OnClick!")
callback.invoke(adapterPosition)
}
}
我理解为什么第二个代码可以工作,但是有人可以解释一下,为什么我的第一个代码不工作吗?有什么区别?
【问题讨论】:
标签: android kotlin onclicklistener