Estoy trabajando con el codelab:
class MainActivity : AppCompatActivity() { private val myName: MyName = MyName("Aleks Haecky") ...la clase MiNombre:
data class MyName(var name: String = "", var nickname: String = "")variable de enlace de datos en el diseño:
<data> <variable name="myName" type="com.example.aboutme.MyName" /> </data>el código en la actividad principal donde se establece un controlador de eventos
... binding.doneButton.setOnClickListener { addNickname(it) } } private fun addNickname(view: View) { binding.apply { myName.nickname = nicknameEdit.text.toString() ...¿Por qué la variable myName genera el siguiente error?
Solo se permiten llamadas seguras (?.) o afirmadas no nulas (!!.) en un receptor anulable de tipo MyName?
myName no se declara anulable. Entonces, ¿por qué se necesita myName?.nickname?
es porque la variable myName en
binding.apply { myName?.nickname = nicknameEdit.text.toString() invalidateAll() ... }no se refiere a esto
private val myName: MyName = MyName("Aleks Haecky")pero se refiere a myName en este xml
<data> <variable name="myName" type="com.example.aboutme.MyName" /> </data>Y todas las variables que defina en el archivo xml de diseño son anulables. Por eso necesitas una llamada segura (?.) cada vez que quieras acceder a ella.