[英]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.