#android #kotlin #button #textview #findviewbyid
#Android #kotlin #кнопка #textview #findviewbyid
Вопрос:
Я довольно новичок в разработке Android с Kotlin, и я хочу объявлять кнопки и текстовые представления в начале моей программы. Чтобы я мог использовать их во всей программе.
Теперь следующий код работает так, как задумано, но, как мы видим, мне приходится использовать его два раза, и я хочу избежать этого.
var labelOutput: TextView = findViewById(R.id.textVIewOutput)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var useButton: Button = findViewById(R.id.buButton1)
var useButton2: Button = findViewById(R.id.buButton2)
var labelOutput: TextView = findViewById(R.id.textVIewOutput)
useButton.setOnClickListener{
labelOutput.setText(calc(3.0, 4.0).toString())
}
useButton2.setOnClickListener{
outputSomething()
}
}
private fun calc (a:Double, b:Double): Double {
val result = a b
return result
}
private fun outputSomething (){
var labelOutput: TextView = findViewById(R.id.textVIewOutput)
labelOutput.text = "something"
}
Однако, если я перемещу «var labelOutput: TextView = findViewById (R.id.textVIewOutput)» выше «переопределить fun onCreate«, чтобы сделать его «глобальным», а затем попытаюсь запустить приложение, оно просто вылетит.
Поэтому я не уверен, почему и как это происходит. Может быть, этот подход совершенно неправильный?
Ответ №1:
Вы должны объявить свой TextView глобально с помощью
var labelOutput: TextView? = null
А затем инициализируйте его в своем onCreate
методе с помощью:
labelOutput = findViewById(R.id.textVIewOutput)
Вы не можете инициализировать свои представления до setContentView
того, как вызов установит ваш текущий макет.
Чтобы использовать ваш labelOutput
экземпляр, просто отредактируйте свою outputSomething
функцию как
private fun outputSomething (){
labelOutput?.text = "something"
}