Как использовать корутины для измения значений полей xml?
Смысл программы - Есть 2 кнопки: action и exit. При нажатии на action - текст в отдельном поле должен начать изменяться в бесконечном цикле. Exit - выход из программы (ее корректное закрытие). Основной Activity у меня выглядит так:
class MainActivity : AppCompatActivity() {
private lateinit var btn_action: Button
private lateinit var btn_exit: Button
private lateinit var txt: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn_action = findViewById(R.id.btn_action)
btn_action = findViewById(R.id.btn_exit)
txt = findViewById(R.id.Text_data)
txt.text = "Hola"
btn_action.setOnClickListener {
lifecycleScope.launch{
hola()
}
}
btn_exit.setOnClickListener(
exitProcess(0)
)
}
fun hola() {
var count = 0
while (true) {
count++
txt.text = "${count}"
delay(500)
}
}
При запуске программа либо вылетает, либо не выполняет функцию hola. Как можно исправить этот код чтобы программа заработала?
Ответы (1 шт):
Автор решения: Л. Р.
→ Ссылка
Нашел ошибку. Проблема оказалась очень простой - два раза задал btn_action с переприсвоением. Следующий код - заработал.
class MainActivity : AppCompatActivity() {
private lateinit var btn_action: Button
private lateinit var btn_exit: Button
private lateinit var txt: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn_action = findViewById(R.id.btn_action)
btn_exit = findViewById(R.id.btn_exit)
txt = findViewById(R.id.Text_data)
txt.text = "Hola"
btn_action.setOnClickListener {
lifecycleScope.launch {
hola()
}
txt.text = "222222222"
}
btn_exit.setOnClickListener {
exitProcess(0)
}
}
suspend fun hola() {
var count = 0
while (true) {
count++
txt.text = "${count}"
delay(500)
}
}
}
ЮрийСПБ, cпасибо за за комментарии, они очень помогли. Попробую доделать полностью в соотвествии с ними