4

我有以下扩展方法。如何引用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();
    }
}
4

1 回答 1

6

一种方法是使用对象表达式而不是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();
        }
    })
}
于 2016-06-29T13:27:15.220 回答