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.

  • Servicio Spring RESET de arranque: la deserialization de JSON no funciona
  • @Param no funciona en Spring Data JPA
  • No se puede detectar el lanzamiento de exception después de que se cancela Kotlin coroutine
  • Kotlin Reflection Issue
  • ¿Cómo funciona la interpolación de cadenas en Kotlin?
  • Delegación de la class Koltin, pasando esto a delegado
  • Cómo get el nombre de file de class actual en kotlin
  • Es posible escribir la function en Kotlin (es decir, en el nivel superior). ¿Puedo probar la unidad también en el nivel superior?
  • Dagger2 + MVP en Kotlin
  • ¿Por qué el parámetro Integer del método Java está correlacionado con Int y no con el tipo de plataforma?
  • Burlarse de las interfaces con Kotlin y Mockito