У меня есть метод расширения. Как я могу ссылаться на 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(); } }
Один из способов – использовать выражение объекта вместо лямбда так:
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(); } }) }