web-dev-qa-db-fra.com

Android Studio: Intégrer Butterknife?

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'
}
12
android99999

Je pense que votre code est bon, 

  1. Essayez de synchroniser votre diplôme par clic enter image description here

  2. Essayez d'aller File - invalidate Caches et redémarrez votre studio Android.

De plus, n'oubliez pas de mettre ButterKnife.inject(this); dans onCreate()

11
bjiang

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/

19
RWIL

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.

10
Chintan Soni

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

9
Kushal Sharma

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);
    }

}
2
Gabriele Mariotti

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)

1
Harsh Mehta

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

1
Krishna