J'essaie d'implémenter Butterknife dans mon projet de studio Android.
Cependant, lorsque je le fais, j'obtiens une erreur sur @InjectView
"ne peut pas résoudre le symbole InjectView".
Est-ce que je n'ai pas implémenté Butterknife avec succès?
Code d'activité:
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);
}
}
disposition:
<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>
fichier de classement:
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'
}
Je pense que votre code est bon,
Essayez de synchroniser votre diplôme par clic
Essayez d'aller File
- invalidate Caches
et redémarrez votre studio Android.
De plus, n'oubliez pas de mettre ButterKnife.inject(this);
dans onCreate()
Notez que dans les dernières versions de la bibliothèque ButterKnife, l'annotation @InjectView()
n'est plus utilisée.
À la place, @Bind(R.id.tvHelloWorld)
et ButterKnife.bind(this);
sont utilisés.
Référence: http://jakewharton.github.io/butterknife/
Alors ButterKnife vient d'être mis à jour avec la version 8.5.1
Pour l'utiliser,
Ajouter la ligne ci-dessous à l'intérieur du niveau de projet build.gradle
:
classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
Ajoutez les lignes ci-dessous à l'intérieur du niveau d'application build.gradle
:
// Field and method binding for Android views
compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
Appliquez le plugin butterknife comme ci-dessous:
apply plugin: 'com.jakewharton.butterknife'
Un petit changement de syntaxe par rapport à la version précédente de ButterKnife est que, maintenant, vous devez utiliser R2
au lieu de R
tout en utilisant des annotations ButterKnfe.
Pour être précis:
Au lieu d'écrire
@BindView(R.id.textView)
TextView mTextView;
Nous écrirons
@BindView(R2.id.textView)
TextView mTextView;
et ensuite, construisez simplement le projet.
Configurer manuellement la configuration de ButterKnife à partir de ce lien
Fichier -> Autres paramètres -> Paramètres par défaut
Compilateur -> Processeurs d'annotation -> Activer le traitement des annotations
Déplacez la déclaration TextView tv1 dans votre classe . Appelez également le ButterKnife.inject (this); méthode.
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);
}
}
Dans les dernières versions de la bibliothèque ButterKnife (8.5.1), l'annotation @InjectView()
n'est pas utilisée.
Vous pouvez utiliser @BindView(Component)
au lieu de @InjectView (Component) et au lieu d'utiliser Butterknife.inject(this)
, utilisez ButterKnife.bind(this)
J'ai essayé toutes les réponses mais rien ne fonctionne pour moi car dans la bibliothèque, ils ont changé quelque chose. Institué de @InjectView, essayez @Bind. Ça fonctionnera bien