Intereting Posts
Преобразование Java Collection.toArray в kotlin как получить информацию, используя библиотеку волейбола в Котлине как я могу преобразовать InputStream в BufferInputStream в kotlin Android Studio сообщает «Не удалось определить активность запуска: активность по умолчанию не найдена» при построении проектов Kotlin Как использовать setter как obj.value = "", когда у setter есть возвращаемое значение? notifyDataChanged () не удалось обновить данные расширяемого списка Может ли Kotlin испускать аннотации JSR-305 в файлах классов Общее литье в Котлине Котлин, проблема высокого порядка функций Почему Guice не находит привязку List <Interface>? Параметр, заданный как ненулевой, имеет значение NULL при использовании Mokito anyObject () для функции Kotlin Kotlin: исключить null из списка (или другого функционального преобразования) Как решить: «ошибка: не удается найти класс символов …» после преобразования класса Java в Kotlin? Kotlin smart cast не работает для LinearLayout.LayoutParams Tornadofx – Как передать параметр Fragment на каждый экземпляр

UNRESOLVED_REFERENCE в виджетах (TextView) разрешен элемент ошибки в android-kotlin

Как обновить текст Textview в kotlin. Функция «Создать текст в режиме создания» работает, но когда я пробовал внешнее основное удовольствие, это говорит о неразрешенной ссылке.

Как объявить виджет для повторного использования TextView для обновления значения текста? У меня нет опыта с котлином. Может кто-нибудь мне помочь?

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 ") } } 

введите описание изображения здесь

Вы должны объявить свои View как свойства класса, а затем вы можете получить к ним доступ из любого места в классе. Переменная, объявленная внутри функции, доступна только в этой функции.

 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 этом примере я использовал lateinit , но ознакомьтесь с подробным обсуждением различных способов объявления свойства здесь .

В дополнение к тому, что сказал @ zsmb13, вы также можете использовать плагин Kotlin Android Extensions (так как вы включили его как одну из тем), что очень удобно для минимизации потенциальных ошибок findViewById() , исключая использование полей View / и т. д. следующим образом:

Сначала примените плагин в локальном файле build.gradle:

apply plugin: 'kotlin-android-extensions'

Затем импортируйте свойства виджета для определенного макета в свой класс Activity:

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

… и тогда ваша деятельность будет следующей:

 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 ") } } 

вы также можете использовать ленивое свойство, которое будет инициализировать свойство один раз в нужной и отдельной инициализации из вашей логики, например:

 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 ") } } 

ИЛИ напишите встроенную функцию с параметром T типа reified, чтобы сделать код более читаемым.

 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 } }