2015-01-25 40 views
12

Sto cercando di implementare Butterknife nel mio progetto di Android Studio.Studio Android: integrazione di Butterknife?

Tuttavia, quando lo faccio, viene visualizzato un messaggio di errore su @InjectView "Impossibile risolvere il simbolo InjectView".

Non ho implementato Butterknife in modo adeguato?

Codice attività:

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



    } 
} 

disposizione:

<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> 

file di 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' 
} 
+0

Avete sincronizzato il file Gradle? – stkent

risposta

11

Credo che il codice è buona,

  1. Provare a sincronizzare il Gradle cliccando enter image description here

  2. cercare di andare File - invalidate Caches e riavviare il vostro studio Android.

Inoltre, non dimenticare mettere in ButterKnife.inject(this);onCreate()

9

Impostare la configurazione manuale per butterknife da this link

File -> Altre Impostazioni -> Impostazioni predefinite

Compiler -> Annotazione Processori -> Seleziona Abilita elaborazione annotazione

+0

Prima dell'anno questa risposta era perfetta, ma ora Android Studio non ha quelle impostazioni – Sniper

2

Sposta il TextView tv1 dichiarazione all'interno della classe. Chiama anche il ButterKnife.inject (questo); Metodo.

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

} 
19

Si noti che nelle ultime versioni della libreria butterknife, l'annotazione @InjectView() non è più utilizzato.

Al posto @Bind(R.id.tvHelloWorld) e ButterKnife.bind(this); vengono utilizzati.

Riferimento: http://jakewharton.github.io/butterknife/

0

Ho provato tutti la risposta è, ma nulla sta lavorando per me, perché nella biblioteca hanno cambiato qualcosa. Istituito da @InjectView, prova @Bind.E funziona bene

10

Così butterknife appena stato aggiornato alla versione 8.5.1

Per utilizzare questo,

Aggiungi sotto la linea all'interno del progetto a livello build.gradle:

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

Aggiungi al di sotto di linee all'interno app- livello build.gradle:

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

Applicare plug butterknife come di seguito:

apply plugin: 'com.jakewharton.butterknife' 

Un piccolo cambiamento nella sintassi alla precedente versione butterknife è che, ora è necessario utilizzare R2 invece di R durante l'utilizzo di annotazioni ButterKnfe.

Per essere precisi:

Invece di scrivere

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

Scriveremo

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

e poi semplicemente creare il progetto.

+2

Questo è un enorme cambiamento. È sfortunato che non sia documentato o riflesso su http://jakewharton.github.io/butterknife, e la documentazione su https://github.com/JakeWharton/butterknife riflette solo parzialmente la modifica: i primi esempi di codice sulla pagina usa R, e quelli successivi usano R2. E 'anche un peccato che tu possa aggiornare alla 8.5.1, non cambiare nessuno dei tuoi riferimenti R in R2, e comunque compila e gira - che tipo di bug misteriosi ho ora? Questo è un casino. – user3562927

+0

Life saver, penso. Stavo cercando di eseguire il debug per mezz'ora, e risulta che il codice di versione è l'unica causa di questo. facepalm –

1

Nelle ultime versioni della libreria ButterKnife (8.5.1), l'annotazione @InjectView() non viene utilizzata.

È possibile utilizzare al posto di @BindView(Component) @InjectView (Component) e invece di usare Butterknife.inject(this) uso ButterKnife.bind(this)

Problemi correlati