【发布时间】:2018-10-19 05:14:12
【问题描述】:
我正在尝试在 Kotlin 中为 android 编写一个 RecyclerView 适配器类。我正在尝试使用为自定义对象创建自定义查看器类的传统方式,并在其中使用单击侦听器。虽然我可以做其余的事情,比如访问内部类的变量并显示 RecyclerView,但我无法将点击监听器添加到内部类的 var 对象中。
比如
var convertView : View? = itemView
convertView.setOnClickListener(this)
以下是我完整的适配器类代码
public open class TestAdapter(val items: MutableList<Any>, val context: Activity) : RecyclerView.Adapter<TestAdapter.CustomViewHolder>() {
public var mItem: MutableList<Any> = items
public var mActivity: Activity = context
protected var clickListener: ExampleInterface? = null
public interface ExampleInterface {
fun click(pos: Int) {
}
}
open public fun setListener(mInterFaceListener: ExampleInterface) {
clickListener = mInterFaceListener
}
override fun onCreateViewHolder(p0: ViewGroup, p1: Int): CustomViewHolder {
var parentLayout: View = LayoutInflater.from(mActivity).inflate(R.layout.custom_view, p0, false)
return CustomViewHolder(parentLayout)
// return CustomViewHolder(LayoutInflater.from(mActivity).inflate(R.layout.custom_view, p0, false))
}
override fun getItemCount(): Int {
return mItem.size
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onBindViewHolder(p0: CustomViewHolder, p1: Int) {
p0.dataView.text = mItem.get(p1).toString()
}
inner class CustomViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
var convertView: View? = itemView
var dataView: TextView = convertView!!.findViewById(R.id.data)
var mposition = adapterPosition
override fun onClick(p0: View?) {
if (clickListener != null) {
clickListener!!.click(mposition)
}
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
}
所以如果你在 CustomView 类中看到这两行
var convertView: View? = itemView
var dataView: TextView = convertView!!.findViewById(R.id.data)
我无法访问这些变量“convertView”和“dataView”,因此我可以为它们设置 clicklistener。那么如何实现呢? 谢谢:)
【问题讨论】:
标签: android kotlin android-recyclerview