В Android, когда мы хотим, чтобы View был похож на пользовательский подкласс Button для вызова потребителя, который использует его в макете, обычный шаблон, который я видел, используется для определения интерфейса Listener
, определения методовна интерфейсе, который должен быть реализован, а затем имеет свойство слушателя в пользовательском подклассе View, которое будет вызывать их в подходящее время. Это работает достаточно хорошо, но иногда я чувствую, что это может быть громоздким и менее прямым, иногда - особенно когда я просто хочу один метод, и я знаю, что не будет будущего дополнения. Я недавно переключился на Kotlin, и мне было интересно, имеет ли смысл просто объявить прямую функцию var в подклассе View как Optional
со значением по умолчанию null
, что-то вроде этого:
class SuperAmazingButton: ImageButton{
var customAction: (()->Unit)? = null
}
Когда нам нужно вызвать customAction, мы можем сделать это в простом однострочном режиме, как это, вместе с безопасной проверкой нуля:
customAction?.invoke()
Я хотел бы знать, есть ликакие-либо недостатки этого подхода? Будет ли утечка андроида Context
, который держится за вид, когда Activity
или Fragment
будет уволен? Есть ли другие проблемы, которые могут возникнуть? Я имею в виду, что это выглядит так просто, легко и просто, без каких-либо новых файлов - это почти слишком хорошо, чтобы быть правдой!