Как начать работу с адаптером в Kotlin Android - PullRequest
0 голосов
/ 12 мая 2018

Я создал простой Adapter. Я пытаюсь запустить Activity из Adapter, когда пользователь нажимает на элемент. Я не могу получить context в onClick. Я исполняю onClick в классе MyViewHolder. Вот мой код адаптера:

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"
        }
    }

}

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

В этой строке вы получаете сообщение об ошибке, поскольку Intents не объявляется таким образом.Вам также необходимо указать класс Java в качестве второго параметра.

Обратитесь к документации , чтобы узнать, как правильно получить объект Intent.

EDIT

Что касается моего комментария, вам необходимо указать свой класс ViewHolder как внутренний класс.то есть:

inner class MyViewHolder(holder: View) : RecyclerView.ViewHolder(holder){}

Как указано в Справочном руководстве Kotlin , если только он не изменен как внутренний класс, вложенные классы не будут иметь доступа к членам внешнего класса.

0 голосов
/ 12 мая 2018

Неразрешенный справочный контекст

ПРИМЕЧАНИЕ

Вы должны return Context объект также.

return MyViewHolder(inflatedView,context)

Тогда

 class MyViewHolder(v: View,context:Context) :
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...