2017-01-22 11 views
0

私の顧客では、recyclerviewのアダプタークラスで、単一項目内の各ボタンにクリックリスナーを追加しています。しかし、私はクリックリスナーを追加する必要があるボタンが非常に少なく、私は3〜4人ほどのリスナーがいるので、私のコードを非常に長くしています。クリックリスナーのコードを短くすることが可能かどうか疑問に思っていましたか?これに関する私の研究の間、ラムダ式に出くわしましたが、これらはどちらかが顧客のアダプターで動作しないか、または私はそれらを働かせるように見えません。ラムダ式の使い方/短縮onclicklistenersアンドロイドスタジオ

これは私がatmを使用しているものの例です:しかし、うまく動作しますが、私は4つありますので、可能な限りコードを減らしたいと思います。

myHolder.button.setOnClickListener((View v) -> { 
    //Do something 
    }); 
:ラムダ式は私もこれを試してみました

この言語レベルでサポートされていません。

myHolder.button.setOnClickListener(view -> button.setText("Working")); 

このコード

はというエラーを与える:研究から

myHolder.button.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
     // Do something 
    } 
}); 

は、私はこれを試してみました

これは上記と同じエラーを返します。

コードを短くする他の方法はありますか?

助けがよかったです。ありがとう。

EDITED:

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 
    defaultConfig { 
     applicationId 'com.project.example' 
     minSdkVersion 15 
     targetSdkVersion 25 
     versionCode 1 
     versionName "6.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    productFlavors { 
    } 
} 

..... 依存関係ここで見られるように

+0

Java 8の機能(すべてではありません)を使用する場合は、[Jackを使用してコンパイルする](http://tools.android.com/tech -docs/jackandjill)。 – Patrick

答えて

5

Androidスタジオで使用するJava 8言語機能には、Jack compilerが必要です。 Android Studio 2.1からは、Jackコンパイラがサポートされています。現在のバージョンが2.1未満の場合は、Androidスタジオを更新する必要があります。 build.gradleファイルに次のエントリを追加してください

android { 
    compileSdkVersion 25 
    buildToolsVersion '25.0.0' 

    defaultConfig { 
     applicationId "yourapplicationID" 
     minSdkVersion 14 
     targetSdkVersion 25 
     versionCode 11 
     versionName "3.1" 
     jackOptions { 
      enabled true 
     } 
    } 

    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_8 
     targetCompatibility JavaVersion.VERSION_1_8 
    } 
} 

dependencies { 
..... 
} 
+0

編集を参照してください。ここでjackOptionsコードを入力する必要があります。私がそれをbuildTypesの上に置くとエラーになります – SumOne

+0

defaultConfigにそれを追加します – bond007

0

- >https://developer.android.com/guide/platform/j8-jack.htmlラムダがサポートされなければなりません。 SDKのバージョンを確認し、必要に応じてアップグレードする必要があります。

+0

私は最新バージョン25,0.1を持っています – SumOne

+0

そして、どのJDKを使用していますか? –

+0

私はjavaバージョン8を持っていますが、私はどのように私はjdkのバージョンを確認することができます – SumOne

3

Java8をサポートするには、ジャックコンパイラを有効にする必要があります。これを行うにはbuild.gradleに追加してください

android { 
    ... 
    defaultConfig { 
    ... 
    jackOptions { 
     enabled true 
    } 
    } 
    compileOptions { 
    sourceCompatibility JavaVersion.VERSION_1_8 
    targetCompatibility JavaVersion.VERSION_1_8 
    } 
} 
+0

私はjackOptionsコードを入れてください。私はそれをbuildTypesの上に置くとエラーになります – SumOne

+0

@SumOney 'android'ブラケットの内側。基本的には、 'jackOptions'と' compileOptions'の2つの新しいオプションを追加します。 –