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 } } 
  • Error de puntero nulo al hacer reference a RecyclerView en un fragment con Kotlin
  • Encuadernación con vista de Android Kotlin: findViewById vs Butterknife vs Kotlin Android Extension
  • Diseño inflado por progtwigción con las extensiones de Kotlin para Android
  • Llamadas seguras en Kotlin con Array es confuso
  • Cambiar el filter de color del elemento del cajón de navigation también cambia el imageView, que es el mismo ID de image
  • ¿Qué significa la advertencia «Usar properties de los packages de variante de compilation»?
  • Parsing xml kotlin android
  • Tipo de interferencia fallida. No coinciden los types esperados: requiere un par de cadenas encontrado <String, String> en Kotlin y Anko
  • Cómo usar null con kotlin @Parcelize
  • ¿Cómo hacer AppBar universal con Anko DSL?
  • Kotlin Elimina todos los caracteres no alfanuméricos