>
>
>>
Oops! Não é o que esperávamos. O texto do primeiro botão foi alterado para o texto que foi escrito para o segundo, e o texto do segundo botão não foi absolutamente alterado.
Explicação do problema
Tentemos compreender qual é a razão deste resultado. Agora veja como funciona o sintético sob o capô. Para decompilar a classe kotlin para Java (Mostrar Kotlin Bytecode ->Descompilar para AndroidStudio). Agora a MainActivity parece com isto:
Agora podemos compreender como funciona o sintético. A actividade tem HashMap, que usa id de view como chave, e view-object como valor. É preenchido por inicialização preguiçosa. No nosso caso, a primeira chamada ao botão1 procura o valor HashMap pela tecla id = R.id.button. Como ainda não existe tal valor, o método adiciona um par ao mapa, onde id como chave, e um botão-objecto do item1 como valor. Como resultado, o texto para o primeiro botão é aplicado com sucesso.
A chamada para o botão2, que também tem id = R.id.button, verifica o valor do mapa para esta chave, encontra a nossa primeira Vista (o botão do primeiro item), e preenche-o com o valor para o segundo botão. Como resultado o primeiro botão muda de texto duas vezes, secone one no one time
Solução do problema
Como primeiro botão, pode usar id diferente para cada vista. Mas se não for útil, pode voltar a findViewById:
>
Deixar correr a aplicação e ver ao resultado:
>
Agora funciona correctamente!
Conclusão
Novas características da linguagem dão um lof ot útil, mas você deve entender como funciona para evitar problemas.
Bancos pela leitura deste artigo! Espero que seja útil para si