Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

ItemView fora do método 'vincula'

Olá a todos

Por que o itemView não aparece fora da função?

Sempre que escrevo 'itemView' no escopo da classe ViewHolde ela fica sublinhada em vermelho com a msg: Expecting member declaration

preciso ter acesso a ela pra implementar um listener mas não estou conseguindo

4 respostas

Fala Ley, de boa ?

O itemView é um atributo da classe ViewHolder, o que faz com que tu só consiga ter acesso dentro dela.

Algo que geralmente a galera faz é receber um high order function no adapter e usar ele dentro do viewholder:

class Adapter(lista: LIst<?>, onClick: (?) -> Unit) : RV.Adapter<VH>(){

        class ViewHolder : RV.ViewHolder() {

            fun bind(item : ?) {
                itemView.setOnClickListener {
                        onClick(item)
                }
            }
        }
}

Olá, matheus. tudo bem?

Da onde sairam esses parametros do adapter ** lista: LIst<?>, onClick: (?) -> Unit ** ?

O meu problema na verdade não está só no itemView, eu acabei colocando ele dentro do init{} e ele funcionou. Mas agora não consigo declarar a propriedade de classe da interface que criamos, a onItemClickListenerRecycler pq o kotlin não aceita que ela seja inicializada depois

: (

manda seu código inteiro

solução!

Pra quem quiser saber, fiz dessa forma e deu certo:

class ListaAlimentoAdapter(
    val context: Context,
    alimentos: List<Alimento>,
) : RecyclerView.Adapter<ListaAlimentoAdapter.vHolder>() {
    val dataset = alimentos.toMutableList()
    private lateinit var onItemClickListenerRecycler: OnItemClickListenerRecycler


    inner class vHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        lateinit var alimento: Alimento
        var posicao: Int = -1
        val campoNome = this.itemView.findViewById<TextView>(R.id.item_nome)

        fun vincular(alimento: Alimento) {
            this.alimento = alimento
            campoNome.text = alimento.nome
        }

        fun repassarPosicao(position: Int) {
            posicao = position
        }

        init {
            itemView.setOnClickListener(object : View.OnClickListener {
                override fun onClick(v: View?) {
                    onItemClickListenerRecycler.onItemClick(alimento, posicao)

                }
            })
        }
    }

Não sei se é a implementação correta, mas está funcionando

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software