Android ButterKnife

Я установил ButterKnife мой build.gradle выглядит так:

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

Моя учетная запись выглядит так:

package com.example.egen.forum;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class LoginActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        ButterKnife.bind(this);
        Toast.makeText(getApplicationContext(), "Your toast message.",
                Toast.LENGTH_SHORT).show();
    }

    @OnClick(R.id.btnLogin) public void test() {
        Toast.makeText(getApplicationContext(), "Your toast message.",
                Toast.LENGTH_SHORT).show();
    }
}

Второй тост не появляется. Что я здесь не так делаю?

3 ответа

Решение

Вы не включили процессор аннотаций для генерации кода ButterKnife. Сделайте это, как описано на странице GitHub:

dependencies {
  compile 'com.jakewharton:butterknife:8.4.0'
  annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
}

И примените плагин:

apply plugin: 'com.jakewharton.butterknife'

В противном случае ваш код выглядит нормально.

Объяснение: Библиотека ButterKnife использует процессор аннотаций для генерации кода, который предоставляет ссылки на представления и выполняет аннотированные методы ButterKnife. Если вы перестроите свой проект, и AndroidStudio покажет, что @OnClick Аннотированный метод не используется, тогда что-то не так. Если процессор аннотаций предоставлен и работает правильно, он должен отображаться как использованный и приводить к сгенерированному методу.

Добавьте эту строку:

annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'

а также в вашем build.gradle.

Смотрите здесь для получения дополнительной информации

Что ж, Butterknife - вчера, используйте вместо этого привязку данных: https://developer.android.com/topic/libraries/data-binding/index.html. Это почти тот же инструмент из коробки

Другие вопросы по тегам