Oops! Non è quello che ci aspettavamo. Il testo del primo pulsante è stato cambiato al testo che è stato scritto per il secondo, e il testo del secondo pulsante non è cambiato assolutamente.
Spiegazione del problema
Cerchiamo di capire qual è la ragione di questo risultato. Ora vediamo come funziona il lavoro sintetico sotto il cofano. Per questo decompiliamo la classe Kotlin in Java (Show Kotlin Bytecode -> Decompile for AndroidStudio). Ora MainActivity assomiglia a questo:
Ora possiamo capire come funziona il sintetico. L’attività ha HashMap, che usa l’id della vista come chiave e l’oggetto della vista come valore. È riempita da un’inizializzazione pigra. Nel nostro caso, la prima chiamata a button1 cerca il valore della HashMap con la chiave id = R.id.button. Poiché non c’è ancora un tale valore, il metodo aggiunge una coppia alla mappa, dove id come chiave e un oggetto-pulsante da item1 come valore. Come risultato, il testo per il primo pulsante viene applicato con successo.
La chiamata a button2, che ha anche id = R.id.button, controlla il valore della mappa per questa chiave, trova il nostro primo View (il pulsante dal primo elemento), e lo riempie con il valore del secondo pulsante. Come risultato, il primo pulsante cambia testo due volte, il secondo non una volta
Soluzione del problema
Come prima, potete usare id diversi per ogni vista. Ma se non è utile, puoi tornare a findViewById:
Eseguiamo l’applicazione e vediamo il risultato: