2015-01-31 58 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