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 } } 
  • Clase Kotlin no encontrada
  • ¿Insertar o agregar un elemento en ArrayList en Kotlin?
  • Cómo pasar el nombre de db en time de ejecución en kotlin
  • Diseño inflado por progtwigción con las extensiones de Kotlin para Android
  • ¿Cómo crear un button en Kotlin que abre una nueva actividad (Android Studio)?
  • Cómo configurarOnNavigationItemListener en BottomNavigationView en Android usando Kotlin?
  • Kotlinx inyecta vista desde el layout incorrecto
  • La extensión sintética de Kotlin y varias incluyen el mismo layout
  • No se pudo encontrar la class 'kotlin.jvm.internal.DefaultConstructorMarker'
  • Por qué los numbers que aceptan nulos no son para preservar la identidad
  • Cambiar el filter de color del elemento del cajón de navigation también cambia el imageView, que es el mismo ID de image