Android Studio: интеграция Butterknife?

Я пытаюсь реализовать Butterknife в своем проекте студии Android.

Однако, когда я делаю это, я получаю сообщение об ошибке @InjectView "не может разрешить символ InjectView".

Неужели я не реализовал Butterknife?

Код операции:

package com.example.rodf.testapp;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends ActionBarActivity {

    @InjectView(R.id.tvHelloWorld) TextView tv1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



    }
}

расположение:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView
        android:id="@+id/tvHelloWorld"
        android:text="@string/hello_world" android:layout_width="wrap_content"
        android:layout_height="wrap_content" />



</RelativeLayout>

gradle файл:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.rodf.testapp"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    //adding the butter knife library
    compile 'com.jakewharton:butterknife:6.0.0'
}

Ответ 1

Я думаю, что ваш код хорош,

  • Попробуйте синхронизировать ваш gradle, нажав enter image description here

  • Попробуйте пойти File - invalidate Caches и перезагрузите свою студию Android.

Кроме того, не забудьте поставить ButterKnife.inject(this); в onCreate()

Ответ 2

Обратите внимание, что в последних версиях библиотеки ButterKnife аннотация @InjectView() больше не используется.

Вместо @Bind(R.id.tvHelloWorld) и ButterKnife.bind(this);.

Ссылка: http://jakewharton.github.io/butterknife/

Ответ 3

Итак, ButterKnife только что обновил версию 8.5.1

Чтобы использовать это,

Добавьте строку ниже уровня проекта build.gradle:

classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'

Добавьте ниже строки внутри уровня приложения build.gradle:

// Field and method binding for Android views
compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'

Примените плагин для масляного ножа, как показано ниже:

apply plugin: 'com.jakewharton.butterknife'

Небольшое изменение в синтаксисе предыдущей версии ButterKnife заключается в том, что теперь вы должны использовать R2 вместо R при использовании аннотаций ButterKnfe.

Конкретно:

Вместо записи

@BindView(R.id.textView)
TextView mTextView;

Мы будем писать

@BindView(R2.id.textView)
TextView mTextView;

а затем просто создайте проект.

Ответ 4

Настройте ручную конфигурацию для ButterKnife от этой ссылки

Файл → Другие настройки → Настройки по умолчанию

Компилятор → Обработчики аннотации → Проверка активировать обработку аннотаций

Ответ 5

Переместите объявление TextView tv1 внутри своего класса. Также вызовите ButterKnife.inject(это); Метод.

import butterknife.ButterKnife;
import butterknife.InjectView;

public class MainActivity extends ActionBarActivity {

    @InjectView(R.id.tvHelloWorld) TextView tv1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.inject(this);
    }

}

Ответ 6

В последних версиях библиотеки ButterKnife (8.5.1) аннотация @InjectView() не используется.

Вы можете использовать @BindView(Component) вместо @InjectView (Component) и вместо использования Butterknife.inject(this) использовать ButterKnife.bind(this)

Ответ 7

Я пробовал весь ответ, но для меня ничего не работает, потому что в библиотеке они что-то изменили. При запуске @InjectView попробуйте @Bind. Он будет работать нормально