[android] Lambda in Android Studio

OS만 업그레이드 되는 것 같은 안드로이드도 꾸준히 변화하고 있다.

안드로이드 스튜디오에서 listener를 달면

findViewById(R.id.plus).setOnClickListener(new View.OnClickListener()
{
  @Override
  public void onClick(View view)
  {
    containerPlus.setVisibility(containerPlus.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE);
  }
});

 

screenshot

이런 식으로 줄어서 표시되는데, 실제로는 람다를 적용하면 실제 코드를 저렇게 짤 수 있다.

 

방문해야 하는 곳은 https://github.com/evant/gradle-retrolambda 이다.

// ----- add
buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'me.tatarka:gradle-retrolambda:3.2.4'
    }
}

repositories {
    mavenCentral()
}
// ----- end

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda' // ----- add 

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

//----add
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
//---end

    defaultConfig {
        applicationId "kr.susem99.testlambda"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
}

이렇게 추가를 해놓으면

screenshot 3

이렇게 warning이 뜨고, 전구를 누르면 자동으로

Button btn = new Button(this);
btn.setOnClickListener(view -> Log.i("MainActivity | onClick", "|" + "click" + "|"));

이렇게 바꿔준다.

 

지금 쓰는 프로젝트에 넣어도 괜찮을 것 같다.

 

 

screenshot 4

java 8이 깔려 있어야 한다.