在 groovy 中将侦听器转换为闭包

Converting listeners to closures in groovy

我决定将我的 android 项目转换为 groovy。我是 Groovy 的新手,正在尝试使用 Groovy 的一些魔法来使代码可读。

我试图转换的代码片段之一是匿名的 OnXXXClickListener。

那么我该如何转换

_children.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            void onItemClick(
                    final AdapterView<?> parent,
                    final View view, final int position, final long id) {

            }
        })

闭包更易读

找到这个 - http://mrhaki.blogspot.co.il/2013/11/groovy-goodness-implicit-closure.html

并尝试使用

AdapterView.OnItemClickListener listener = {foo}

但是我得到 Cannot assign closure to OnItemClickListener

我写了完整的闭包,Android studio 接受了它,没有任何错误。

AdapterView.OnItemClickListener listener = { 
        parent, view, long position, id -> 
    startActivity(
        new Intent(getApplicationContext(), ChildDetails.class)
            .putExtra( ChildDetails.CHILD_NAME, position ))
}
_children.setOnItemClickListener listener

不确定 "android on groovy",但简单地说 groovy 我会这样写 id:

def closure = { parent, view, long position, id -> yourCode() }
_children.onItemClickListener = [ onItemClick:closure ] as OnItemClickListener