Я ответил на ваш другой вопрос , поэтому у меня есть немного больше контекста :-) Вместо непосредственного сравнения цветов фона вы должны сохранить свое собственное состояние вашего приложения, чтобы вы могли контролировать, что это такое. до, и пусть фон реагирует соответственно.
enum class State {
ON,
OFF
}
Из репозитория GitHub измените свой l oop, чтобы обновить состояние:
when (Random.nextBoolean()) {
true -> state = State.ON
false -> state = State.OFF
}
Затем используйте это состояние для обновления пользовательского интерфейса:
private fun updateUI() {
when (state) {
State.ON -> {
background.setBackgroundColor(Color.GREEN)
}
State.OFF -> {
background.setBackgroundColor(Color.RED)
}
}
}
И, таким образом, вы можете снова использовать состояние для реакции на нажатие кнопки:
btn_touch.setOnClickListener {
when (state) {
State.ON -> reactOnClickWhenOn()
State.OFF -> reactOnClickWhenOff()
}
}
private fun reactOnClickWhenOn() {
counter += 1
}
private fun reactOnClickWhenOff() {
Toast.makeText(this, "Nope!", Toast.LENGTH_SHORT).show()
}
Полный пример:
import android.graphics.Color
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.foo.*
import kotlinx.coroutines.*
import java.util.concurrent.TimeUnit
import kotlin.random.Random
class FooActivity : AppCompatActivity() {
private var state = State.OFF
private var counter: Int = 0
private var running = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.foo)
val loop = true
GlobalScope.launch(Dispatchers.IO) {
while (loop) {
while (running) {
delay(TimeUnit.SECONDS.toMillis(Random.nextLong(5)))
when (Random.nextBoolean()) {
true -> state = State.ON
false -> state = State.OFF
}
withContext(Dispatchers.Main) {
updateUI()
}
}
}
}
btn_touch.setOnClickListener {
when (state) {
State.ON -> reactOnClickWhenOn()
State.OFF -> reactOnClickWhenOff()
}
}
}
private fun updateUI() {
when (state) {
State.ON -> {
background.setBackgroundColor(Color.GREEN)
}
State.OFF -> {
background.setBackgroundColor(Color.RED)
}
}
}
private fun reactOnClickWhenOn() {
counter += 1
}
private fun reactOnClickWhenOff() {
Toast.makeText(this, "Nope!", Toast.LENGTH_SHORT).show()
}
override fun onResume() {
super.onResume()
running = true
}
override fun onPause() {
running = false
super.onPause()
}
enum class State {
ON,
OFF
}
}