繁体   English   中英

如何从Kotlin Android中的适配器启动活动

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM