您当前的位置: 首页 >  kotlin
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

kotlin无法获取内部类引用,使用匿名对象

沙漠一只雕得儿得儿 发布时间:2020-12-23 11:34:16 ,浏览量:0

尝试在onCreate方法中获取视图的高度,但找不到任何方法来删除OnGlobalLayoutListener。

在java中这么写是OK的:

containerLayout.getViewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {  
    @Override  
    public void onGlobalLayout() {  
        containerLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
        int width  = layout.getMeasuredWidth();
        int height = layout.getMeasuredHeight(); 

    }  
});

在kotlin中,使用lambda表达式,无法获取到this,而无法删除掉这个内部类的listener:

   containerLayout.viewTreeObserver.addOnGlobalLayoutListener {
            containerLayout.viewTreeObserver.removeOnGlobalLayoutListener(this)
            Toast.makeText(applicationContext, "size is "+ containerLayout.height,Toast.LENGTH_LONG).show()
        }

kotlin是不支持从内部引用lambda,解决方法是,可以使用匿名对象,而不是将lambda SAM转换为Java功能接口OnGlobalLayoutListener:

containerLayout.viewTreeObserver.addOnGlobalLayoutListener(object: ViewTreeObserver.OnGlobalLayoutListener {
    override fun onGlobalLayout() {
        // your code here. `this` should work
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            viewTreeObserver.removeOnGlobalLayoutListener(this)
        } else {
            viewTreeObserver.removeGlobalOnLayoutListener(this)
        }
    }
})

 

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.0386s