UNRESOLVED_REFERENCE en widget (TextView) resuelto al elemento error en android-kotlin

Cómo actualizar el text de Textview en kotlin. La function Establecer text en creación funciona, pero cuando probé fuera de la diversión principal dice ref sin resolver.

¿Cómo puedo declarar el widget para reutilizar TextView para actualizar el valor del text? No tengo exp con kotlin. ¿Puede alguien ayudarme?

class MediaPickedActivity : AppCompatActivity() { val fullName = "Test User" var score = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_media_picked) val Tv_test = findViewById(R.id.tv_text) as TextView Tv_test.setText("$fullName :: $score ") if (score in 0..300) { score = 5 setText() } } private fun setText() { // Error is here. I can't set text. Tv_test.setText("$fullName :: $score ") } } 

enter image description here

Debes declarar tus View como properties de nivel de class, y luego puedes acceder a ellas desde cualquier lugar dentro de la class. Una variable declarada dentro de una function solo es accesible en esa function.

 class MediaPickedActivity : AppCompatActivity() { lateinit var Tv_test: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_media_picked) Tv_test = findViewById(R.id.tv_text) as TextView } private fun setText() { Tv_test.setText("$fullName :: $score ") } } 

lateinit en este ejemplo, pero veo una discusión detallada sobre las diferentes forms de declarar la propiedad aquí .

Además de lo que dijo @ zsmb13, también puedes utilizar el complemento Kotlin Android Extensions (ya que lo incluiste como uno de los temas), que es muy conveniente para minimizar los posibles errores findViewById() , excluyendo el uso de View fields / member variables, y etc. de la siguiente manera:

Primero aplique el complemento en su file local build.gradle:

apply plugin: 'kotlin-android-extensions'

A continuación, importe las properties del widget para un determinado layout en su class de actividad:

import kotlinx.android.synthetic.main.<layout>.*

… y luego tu actividad sería la siguiente:

 import kotlinx.android.synthetic.main.activity_media_picked.* class MediaPickedActivity : AppCompatActivity() { val fullName = "Test User" var score = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_media_picked) // Simply references via the TextView's ID, and sets its text. tv_text.setText("$fullName :: $score ") if (score in 0..300) { score = 5 setText() } } private fun setText() { tv_text.setText("$fullName :: $score ") } } 

también puede usar una propiedad perezosa que inicializará la propiedad una vez en la initialization necesaria e independiente de su lógica, por ejemplo:

 class MediaPickedActivity : AppCompatActivity() { val Tv_test by lazy { findViewById(R.id.tv_text) as TextView } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_media_picked) Tv_test.setText("$fullName :: $score ") // ... } private fun setText() { Tv_test.setText("$fullName :: $score ") } } 

O escriba una function en línea con un parámetro de tipo reificado T para que el código sea más legible.

 class MediaPickedActivity : AppCompatActivity() { val nonNull by find<TextView>(R.id.tv_text) val nullable by find<TextView?>(R.id.tv_text) // ... } inline fun <reified T : View?> Activity.find(id: Int): Lazy<T> { return lazy { findViewById(id) as T } } 
  • Extensiones en Kotlin
  • Kotlin Objetos de carga demorada
  • NullPointerException en android.support.v4.app.NotificationCompatBase $ Action.getIcon ()
  • ¿Cuál es el equivalente de este código de java a kotlin
  • ¿Insertar o agregar un elemento en ArrayList en Kotlin?
  • Extensiones y fragments de Kotlin para Android
  • Comprobación de conectividad no funciona en Android Oreo Kotlin
  • ¿Cómo crear un button en Kotlin que abre una nueva actividad (Android Studio)?
  • Obligatorio <Objeto> y encontrado <Objeto>?
  • El conflicto de las properties sintéticas de Kotlin
  • Diálogo personalizado de Kotlin Parámetro especificado como no nulo