簡體   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