Referencia no resuelta usando Kotlin para android

Obtengo Referencia no resuelta al comstackr

Error: (42, 26) Referencia no resuelta: r1 Error: (42, 36) Referencia no resuelta: ds

en las variables de método onClick r1, y ds se muestran como errores. en kotlin todos los varibales son finales. Entonces, ¿cómo es que no lo está aceptando? por favor consejo siguiente es el guión

class MainActivity : AppCompatActivity(), View.OnClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val b1: Button = findViewById(R.id.add) val a1: EditText = findViewById(R.id.opr1) val a2: EditText = findViewById(R.id.opr2) val d1: Int = (a1.getText().toString().toInt()) val d2: Int = (a2.getText().toString().toInt()) var r1: TextView = findViewById(R.id.res) var ds :Int =d1+d2 } override fun onClick(v: View?) { when (v?.id) { R.id.add -> r1.text= (ds).toString() } } } 

ds es una variable local a la que solo se puede acceder dentro de la function onCreate() . Si desea resumir los numbers de EditText , debe poner su lógica de adición dentro del método onClick() :

 override fun onClick(v: View) { when (v.id) { R.id.add -> { val d1: Int = et1.text.toString().toInt() val d2: Int = et2.text.toString().toInt() val ds = d1 + d2 r1.text = ds.toString() } } } 

Además, debe declarar r1 y otra reference de vista como miembro de la class para que se pueda acceder dentro de su class Activity pero no solo onCreate() .

r1 es una variable local en onCreate por lo que no es accesible fuera de esta function.

Declararlo fuera de la function de esta manera:

 private lateinit var r1: TextView 

Asignarlo en onCreate así:

 r1 = findViewById(R.id.res) 

Luego puede acceder a él como espera:

 r1.text= ds.toString() 

La misma regla se aplica a otras variables a las que desee acceder fuera de onCreate .

Por qué lateinit

onCreate no es un constructor, por lo que r1 no está inicializado antes de eso. Pero sabes que onCreate es lo primero que se llama en el ciclo de vida de la actividad, así que cuando inicialices la variable aquí, siempre será no nulo.

De lo contrario, tendrías que declarar la variable así:

 private var r1: TextView? 

y acceda con el !! operador, por ejemplo:

 r1!!.setText(...) 

La variable ds solo existe en la primera function. Debes declararlo afuera para acceder desde el segundo.

  • Manejo de errores de suscripción anidada RX2.0
  • Función de acceso antes de llamar al constructor de superclass en la class de datos de Kotlin
  • Formas dinámicas de Android
  • La aplicación Kotlin no muestra mi matriz json
  • Con la dependency injection Kodein, no quiero pasar por todas las instancias de kodein en todas partes
  • Extensión de Kotlin no reconocida en el adaptador
  • Texto parpadeando en Android, con Kotlin más conciso
  • No se pudo encontrar la class databinding.FragmentBinding
  • Aplicación; había usado un AppComponent diferente; durante la verificación previa
  • ¿Cómo saltarse los models proguard utilizados por retrofit2 que está en el package base?
  • ¿Ya funciona el modificador de visibilidad "interno" en Kotlin?