我有以下扩展方法。如何引用传递给OnGlobalLayoutListener
方法的addOnGLobalLayoutListener()
?我需要将监听器传递给removeOnGlobalLayoutListener()
方法。
fun View.OnGlobalLayout(callback:() -> Unit ): Unit{
this.viewTreeObserver.addOnGlobalLayoutListener {
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
this.viewTreeObserver.removeOnGlobalLayoutListener(this);
}
else {
this.viewTreeObserver.removeGlobalOnLayoutListener(this);
}
callback();
}
}
答案 0 :(得分:2)
一种方法是使用object expression代替lambda,如下所示:
fun View.OnGlobalLayout(callback: () -> Unit): Unit {
val viewTreeObserver = this.viewTreeObserver
viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
viewTreeObserver.removeOnGlobalLayoutListener(this);
} else {
viewTreeObserver.removeGlobalOnLayoutListener(this);
}
callback();
}
})
}