Kotlin Lambda에서 this 참조가 제대로 걸리지 않아서 (지원하지 않는다고 함) addOnGlobalLayoutListener를 일회성으로 사용하기가 어려웠다.
이렇게 적어서 구현하고 싶었지만...방황하는 this...
view.viewTreeObserver.addOnGlobalLayoutListener {
// TODO...
view.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
SelfReference를 추가하여 구현하면된다.
class SelfReference<T>(val initializer: SelfReference<T>.() -> T) {
val self: T by lazy {
inner ?: throw IllegalStateException()
}
private val inner = initializer()
}
fun <T> selfReference(initializer: SelfReference<T>.() -> T): T {
return SelfReference(initializer).self
}
view.viewTreeObserver.addOnGlobalLayoutListener(selfReference {
OnGlobalLayoutListener {
// TODO...
view.viewTreeObserver.removeOnGlobalLayoutListener(self)
}
})
'프로그래밍 > Android' 카테고리의 다른 글
[안드로이드] Google SafetyNet Attestation으로 기기 무결성을 확보하기 (클라이언트/서버 Python) (0) | 2021.06.03 |
---|---|
[안드로이드] WebView 사용시 "Uncaught TypeError: Cannot read property 'getItem' of null" 해결 (0) | 2021.05.30 |
[안드로이드] 루팅 기기 체크하는 법 (Rooted device detection) (2) | 2021.04.17 |
[안드로이드] 색상 변화 애니메이션 만들기 (ValueAnimator / Color change animation) (0) | 2021.04.10 |
[안드로이드] 앱이 버벅거리지 않게 하기 위해서 해야할 일 (0) | 2021.03.31 |