Как использовать корутины для измения значений полей xml?

Рейтинг: 0Ответов: 1Опубликовано: 11.02.2023

Смысл программы - Есть 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пасибо за за комментарии, они очень помогли. Попробую доделать полностью в соотвествии с ними