在Kotlin Android中处理多个函数中的可变变量

我想在Android中做Kotlin,但是我有一些可变的问题。 比方说,我正在做一个可以通过多种方法访问的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但我找不到一种方法来放置它。

有两种方法可以解决这个问题。 Lateinit和Kotlin的Android扩展 。

Lateinit允许您在后续的类生命期中将值赋给非空类型。

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

您现在可以不用空检查来访问它。

或者,您可以使用Kotlin的扩展。

将插件添加到您的build.gradle

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

并将生成的访问器导入到您的Activity,Fragment或其他内容中。

 import kotlinx.android.synthetic.main.layout_name.* text_view_id.text = "Hello World!"