[英]How to start activity from adapter in kotlin android
我创建了一个简单的Adapter
。 当用户单击某个项目时,我试图从Adapter
内启动Activity
。 我无法在onClick
获取context
。 我正在MyViewHolder
类中执行onClick
。 这是我的适配器代码:
class LeadListAdapter(context:Context, private val leadList: List<Lead>) : RecyclerView.Adapter<LeadListAdapter.MyViewHolder>() {
var activity:Context = context
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val inflatedView = parent.inflate(R.layout.custom_lead_row, false)
return MyViewHolder(inflatedView)
}
override fun getItemCount(): Int {
return leadList.size
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.bindLead(leadList[position])
}
class MyViewHolder(v: View) : RecyclerView.ViewHolder(v), View.OnClickListener {
//2
private var view: View = v
private var lead: Lead? = null
//3
init {
v.setOnClickListener(this)
v.trackButton.setOnClickListener(this)
}
//4
override fun onClick(v: View) {
val intent = Intent(activity) //Getting error here
}
fun bindLead(lead: Lead) {
this.lead = lead
view.leadName.text = lead.cusName
view.leadMobileNumber.text = lead.mobileNo.toString()
view.loanAmount.text = lead.amount.toString()
view.leadId.text = "Lead Id: ${lead.id.toString()}"
view.loanType.text = lead.productType
view.loanTypeIcon.text = getCharsFromWords(lead.productType)
}
private fun getCharsFromWords(productType: String?): String? {
val words = productType!!.split(Regex("\\s+"))
val quote: String
val sb = StringBuilder()
for (word in words) {
sb.append(word[0].toString())
}
quote = sb.toString()
return quote
}
companion object {
//5
private val LEAD_KEY = "LEAD"
}
}
}
未解决的参考上下文
注意
您还应该return
Context对象。
return MyViewHolder(inflatedView,context)
然后
class MyViewHolder(v: View,context:Context) :
您在该行遇到错误,因为没有这样声明Intent。 您还需要提供一个Java类作为第二个参数。
有关获取Intent对象的正确方法,请参考文档 。
编辑
关于我的评论,您需要将ViewHolder类声明为内部类。 即:
inner class MyViewHolder(holder: View) : RecyclerView.ViewHolder(holder){}
如Kotlin参考手册中所述 ,除非被修改为内部类,否则嵌套类将无法访问外部类的成员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.