2016-06-29 3 views
2

다음 확장 방법이 있습니다. addOnGLobalLayoutListener() 메서드로 전달되는 OnGlobalLayoutListener을 어떻게 참조 할 수 있습니까? 청취자를 removeOnGlobalLayoutListener() 메소드로 전달해야합니다.Kotlin에서 익명의 내부 클래스를 참조하는 방법은 무엇입니까?

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

도 참조를 http://stackoverflow.com/questions/38074356/kotlin-recommended-way-of-unregistering-a -listener-with-a-sam – yole

답변

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(); 
     } 
    }) 
} 
관련 문제