2017-01-22 1 views
0

В моем классе адаптера клиента для recyclerview Я добавляю кликов на каждой кнопке в одном элементе. Тем не менее, у меня довольно мало кнопок, к которым я должен добавить слушателей кликов, и делает это, делает мой мой код очень длинным, так как у меня около 3-4 слушателей. Мне было интересно, можно ли сократить код прослушивателя кликов? Во время моих исследований по этому вопросу я встретил выражение лямбда, однако либо они не работают в адаптерах клиентов, либо я не могу заставить их работать.Как использовать лямбда-выражения/Сократить onclicklisteners android studio

Это пример того, что я использую atm: отлично работает, однако у меня есть 4 из них, поэтому я хочу уменьшить код в максимально возможной степени;

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

Из исследований я попытался это:

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

Этот код дают ошибку говоря: лямбда-выражения не поддерживаются на этом уровне языка

Я также попытался это:

myHolder.button.setOnClickListener((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 функций (не все из них, ум), вы можете [скомпилировать с помощью Джека] (http://tools.android.com/tech -docs/jackandjill). – Patrick

ответ

5

Java-язык Java-язык, который будет использоваться в Android Studio, требует компилятора Jack. От Android Studio 2.1 поддерживает компилятор Jack. Вам нужно обновить студию Android, если текущая версия меньше 2.1. Добавьте следующую запись в файле 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

См. Edit, где следует поместить код 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 вам необходимо включить компилятор jack. Для этого добавьте это в свой build.gradle

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

См. Edit, где я должен поместить код jackOptions. Я получаю ошибку, если я положил ее выше buildTypes – SumOne

+0

@SumOney Внутри скобок 'android'. Вы в основном добавляете ему два новых варианта: 'jackOptions' и' compileOptions'. –