How to reference a lambda from inside it?

后端 未结 3 2054
温柔的废话
温柔的废话 2020-12-30 00:44

I am trying to get height of a view in onCreate method but I couldn\'t find any way to remove OnGlobalLayoutListener.

In Java (working):

containerLay         


        
3条回答
  •  佛祖请我去吃肉
    2020-12-30 01:14

    Another solution is to implement and use self-reference:

    class SelfReference(val initializer: SelfReference.() -> T) {
        val self: T by lazy {
            inner ?: throw IllegalStateException()
        }
    
        private val inner = initializer()
    }
    
    fun  selfReference(initializer: SelfReference.() -> T): T {
        return SelfReference(initializer).self
    }
    

    Then the usage would be

    containerLayout.viewTreeObserver.addOnGlobalLayoutListener(selfReference { 
        OnGlobalLayoutListener {
            containerLayout.viewTreeObserver.removeOnGlobalLayoutListener(self)
            // ...
        }
    }
    

    Instead of this, self property is used.

提交回复
热议问题