Ответ
Да, работал. Делегаты (Delegates) в Android часто используются для обратных вызовов (callbacks). Например, в RecyclerView.Adapter для обработки кликов по элементам списка.
Пример:
interface ItemClickListener {
fun onItemClick(position: Int)
}
class MyAdapter(private val listener: ItemClickListener) : RecyclerView.Adapter<MyViewHolder>() {
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.itemView.setOnClickListener {
listener.onItemClick(position)
}
}
}
// Использование:
adapter = MyAdapter(object : ItemClickListener {
override fun onItemClick(position: Int) {
// Обработка клика
}
})
Делегаты также используются в Kotlin через by (например, lazy, observable).
Ответ 18+ 🔞
А, ну это ж классика, ебать мои старые костыли! Делегаты в андроиде — это как раз те самые штуки, которые постоянно подсовывают, когда нужно сделать обратный вызов, чтобы один кусок кода мог наябедничать другому, что что-то случилось. Типа «эй, слушай сюда, пользователь ткнул в эту хрень на экране».
Вот смотри, самый простой пример, как с RecyclerView:
interface ItemClickListener {
fun onItemClick(position: Int)
}
class MyAdapter(private val listener: ItemClickListener) : RecyclerView.Adapter<MyViewHolder>() {
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.itemView.setOnClickListener {
listener.onItemClick(position)
}
}
}
// А вот как это потом юзают, ёпта:
adapter = MyAdapter(object : ItemClickListener {
override fun onItemClick(position: Int) {
// Ну вот тут уже твоя логика, когда элемент тапнули
}
})
Видишь схему? Адаптер сам не парится, что делать при клике. Он просто тыкает в этот интерфейс-посредника и говорит: «На, держи, позицию нажатого элемента. А дальше разбирайся сам, я в это не вникаю». Удобно, чёрт возьми! Чистая архитектура, блядь.
А ещё в самом Котлине есть своя, отдельная тема с делегатами через это волшебное слово by. Ну, там lazy для ленивой инициализации — чтобы переменная вычислялась только когда впервые к ней обращаются, а не при создании объекта. Или observable, который тебе позволит отслеживать, когда значение свойства меняется, и сразу какую-то свою фигню выполнять. Мощный инструмент, если разобраться, а не просто тыкать в код, как мартышлюшка.