1
resposta

acesso a variavel

boa noite,

estou com a seguinte duvida, na inner class ViewHolder fui realizar a vinculação das do RecyclerView, e percebi que só consigo acessar as TextView do Layout do itemView se eu declarasse o itemView com uma variavel (val ou var). se eu só repassar a palavra binding, sem a variavel, não consigo tem acesso aos itens do layout. Gostareia de saber pq sendo que o itemview já está declarado no parâmetro. ou seja Porque (val binding: ItemRvBinding) dá acesso às views do layout ItemRvBinding com a palavras "binding" e (binding: ItemRvBinding) não dá acesso com a palavra "binding".

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá Lucas. Tudo bem?

A questão que você levantou é uma particularidade da linguagem Kotlin relacionada à visibilidade das propriedades dentro de classes e inner classes. Quando você declara um parâmetro no construtor de uma classe em Kotlin usando val ou var, você está na verdade criando uma propriedade da classe que é acessível em todo o seu escopo. Por isso, ao utilizar (val binding: ItemRvBinding) no construtor da sua inner class ViewHolder, você está tornando binding uma propriedade da instância de ViewHolder, acessível em todos os métodos e partes da classe.

Por outro lado, quando você declara apenas (binding: ItemRvBinding), você está criando um parâmetro de construtor que não é promovido a uma propriedade da classe. Ele é acessível apenas dentro do construtor e não é armazenado como um campo da instância da classe. Isso significa que você não poderá acessar binding fora do construtor da sua ViewHolder.

Portanto, para ter acesso à binding em outros métodos da sua inner class ViewHolder, você precisa declará-la como uma propriedade da classe usando val (ou var, se precisar modificar o valor depois), como você fez corretamente.

Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.