Использовать свойство обнуляемой функции в представлении Android вместо определения интерфейса слушателя? - PullRequest
1 голос
/ 02 октября 2019

В Android, когда мы хотим, чтобы View был похож на пользовательский подкласс Button для вызова потребителя, который использует его в макете, обычный шаблон, который я видел, используется для определения интерфейса Listener, определения методовна интерфейсе, который должен быть реализован, а затем имеет свойство слушателя в пользовательском подклассе View, которое будет вызывать их в подходящее время. Это работает достаточно хорошо, но иногда я чувствую, что это может быть громоздким и менее прямым, иногда - особенно когда я просто хочу один метод, и я знаю, что не будет будущего дополнения. Я недавно переключился на Kotlin, и мне было интересно, имеет ли смысл просто объявить прямую функцию var в подклассе View как Optional со значением по умолчанию null, что-то вроде этого:

class SuperAmazingButton: ImageButton{
    var customAction: (()->Unit)? = null
}

Когда нам нужно вызвать customAction, мы можем сделать это в простом однострочном режиме, как это, вместе с безопасной проверкой нуля:

customAction?.invoke()

Я хотел бы знать, есть ликакие-либо недостатки этого подхода? Будет ли утечка андроида Context, который держится за вид, когда Activity или Fragment будет уволен? Есть ли другие проблемы, которые могут возникнуть? Я имею в виду, что это выглядит так просто, легко и просто, без каких-либо новых файлов - это почти слишком хорошо, чтобы быть правдой!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...