2015-01-31 37 views
2

我决定把我的android项目转换为groovy。我是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

+0

你应该能够做到: _children.onOnItemClickListener = {。 ..} 甚至 AdapterView.OnItemClickListener listener = {...} 应该工作。这是IDE说它不允许或构建失败? – melix 2015-01-31 19:24:57

+0

是的,使用Android工作室 – 2015-01-31 19:33:27

+0

我的意思是Gradle构建失败? – melix 2015-01-31 19:39:55

回答

1

我写了完整的封闭和Android工作室接受它没有任何错误。

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

不知道 “机器人上常规”,但在普通的常规我把ID下来,:

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