#kotlin #lambda #this
#kotlin #лямбда #это
Вопрос:
Мне нужно реализовать прослушиватель для контроллера. И когда возникает какое-то условие, прослушиватель должен быть удален. Условие может быть проверено внутри прослушивателя, чтобы его можно было вовремя удалить.
Вот исходная реализация:
fooController
.addListener(object : OnListener {
override fun onChanged() {
if (/* some condition which means that the listener is no longer needed*/) {
navController.removeListener(this)//how to replace?
return@OnListener
}
//do on chande regular code
}
})
но мне нужно было создать объект напрямую и встроить интерфейс формы OnListener. Я не могу понять, как использовать здесь лямбда-выражение. Особенно для «этой» ссылки.
Я попытался написать:
fooController
.addListener {
if (/* some condition which means that the listener is no longer needed*/) {
navController.removeListener(this)//this refer to outer class
return@OnListener
}
//do on chande regular code
}
}
но здесь ключевое слово «this» относится к внешнему классу. Я знаю, что можно было бы использовать синтаксис «@», но не могу понять,
что должно быть после «этого». Нидер найти в документах.
Комментарии:
1. Это ограничение лямбд. Вы должны продолжать использовать анонимный объект.