constructor Handler()' is deprecated. Deprecated in Java
Необходим вызов функции проверки координат, для этого я использую
функцию touch, которая с помощью Handler() вызывает раз в пол секунды функцию проверки координат и при касании экрана раскрашивает квадратики (меняет цвет imageView, при касании по координатам расположения этого элемента).
При сборке выдается предупреждение
constructor Handler()' is deprecated. Deprecated in Java.
Я заменил на более новую версию Handler(Looper.getMainLooper()).postDelayed, но теперь не работает эта часть кода, при касании квадратики не раскрашиваются, то есть функция не вызывается
private fun touch () {
val handler = Handler()
handler.postDelayed(object : Runnable {
override fun run() {
checkCoordinates () // функция проверки координат и раскрашивания квадратиков
mX = 0.0f
mY = 0.0f
handler.postDelayed(this, 500)
}
}, 0)
}
Заменено на:
Handler(Looper.getMainLooper()).postDelayed({
fun run() {
checkCoordinates()
mX = 0.0f
mY = 0.0f
}
}, 500)
Ответы (1 шт):
Вам нужно было просто добавить аргумент в конструктор, а вы полностью изменили код и теперь вызов не периодический, а отложенный одноразовый. Верните как было:
private fun touch () {
val handler = Handler(Looper.myLooper())
handler.postDelayed(object : Runnable {
override fun run() {
checkCoordinates () // функция проверки координат и раскрашивания квадратиков
mX = 0.0f
mY = 0.0f
handler.postDelayed(this, 500)
}
}, 0)
}
P.S. устаревший конструктор без параметров равносилен конструктору с аргументом Looper.myLooper() - это означает что хандлер будет выполнять код в том потоке, в котором он создан.
Looper.getMainLooper() - означает что хандлер будет выполнять код в главном (UI) потоке.