如何在Kotlin中引用匿名内部类?

时间:2016-06-29 11:44:41

标签: kotlin kotlin-extension

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

1 个答案:

答案 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();
        }
    })
}