Обработка изменяемых переменных в нескольких функциях в Kotlin Android

#android #kotlin

#Android #kotlin

Вопрос:

Я хочу сделать Kotlin в Android, но у меня есть некоторые проблемы с изменяемыми. Допустим, я делаю a TextView , доступ к которому осуществляется несколькими методами.

 var tv: TextView? = null

override fun onCreate(savedInstanceState: Bundle?) {
    tv = find(R.id.tv)
}

fun clearText(){
    tv?.setText("")
}

fun setText(text: String) {
    tv?.setText(text)
}
  

Это работает, но tv? каждый раз, когда я использую TextView, это запах кода. Есть ли лучший способ сделать это? Я чувствую, что должен использовать val вместо var , но я не могу найти способ вставить его.

Ответ №1:

Я знаю два способа решить эту проблему. Расширения Lateinit и Kotlin для Android.

Lateinit позволяет присваивать значение ненулевому типу позже в жизненном цикле классов.

 lateinit var textView: TextView

override fun onCreate(savedInstanceState: Bundle?){
  textView = findViewById(R.id.view_text)
}
  

Теперь вы можете получить к нему доступ без проверки null.

Или вы можете использовать расширения Kotlin.

Добавьте плагин в свой build.gradle

 apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
  

И импортируйте сгенерированные средства доступа в свою активность, фрагмент или что-то еще.

 import kotlinx.android.synthetic.main.layout_name.*

text_view_id.text = "Hello World!"