Ответ 1
Я думаю, что ваш код хорош,
-
Попробуйте синхронизировать ваш gradle, нажав
-
Попробуйте пойти
File
-invalidate Caches
и перезагрузите свою студию Android.
Кроме того, не забудьте поставить ButterKnife.inject(this);
в onCreate()
Я пытаюсь реализовать 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'
}
Я думаю, что ваш код хорош,
Попробуйте синхронизировать ваш gradle, нажав
Попробуйте пойти File
- invalidate Caches
и перезагрузите свою студию Android.
Кроме того, не забудьте поставить ButterKnife.inject(this);
в onCreate()
Обратите внимание, что в последних версиях библиотеки ButterKnife аннотация @InjectView()
больше не используется.
Вместо @Bind(R.id.tvHelloWorld)
и ButterKnife.bind(this);
.
Итак, 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;
а затем просто создайте проект.
Настройте ручную конфигурацию для ButterKnife от этой ссылки
Файл → Другие настройки → Настройки по умолчанию
Компилятор → Обработчики аннотации → Проверка активировать обработку аннотаций
Переместите объявление 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);
}
}
В последних версиях библиотеки ButterKnife (8.5.1) аннотация @InjectView()
не используется.
Вы можете использовать @BindView(Component)
вместо @InjectView (Component) и вместо использования Butterknife.inject(this)
использовать ButterKnife.bind(this)
Я пробовал весь ответ, но для меня ничего не работает, потому что в библиотеке они что-то изменили. При запуске @InjectView попробуйте @Bind. Он будет работать нормально