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 } } 
  • Compara una vista de text con una string en Kotlin
  • Genéricos Java vs Kotlin
  • Convierta un ArrayMap en ArrayList - Kotlin
  • Cómo pasar el nombre de db en time de ejecución en kotlin
  • Prueba unitaria de la function de extensión de Kotlin en las classs de Android SDK
  • NoSuchMethodError usando @Parcelize Annotation en Kotlin
  • Android Studio / Kotlin: error no válido "El método de anulación debería llamarse super"
  • "Las proyecciones no están permitidas para los arguments inmediatos de un supertipo" Kotlin Android Studio
  • Extensiones de Kotlin para Android y menu
  • Tipo de interferencia fallida. No coinciden los types esperados: requiere un par de cadenas encontrado <String, String> en Kotlin y Anko
  • Hacer reference a las vistas con la misma identificación en diferentes layouts con extensiones de android kotlin