Android Studio:如何集成Butterknife?

14

我正在尝试将Butterknife引入我的Android Studio项目。

然而,当我这样做时,@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文件吗? - stkent
7个回答

20
请注意,在最新版本的ButterKnife库中,不再使用@InjectView()注释。
取而代之的是使用@Bind(R.id.tvHelloWorld)ButterKnife.bind(this);
参考:http://jakewharton.github.io/butterknife/

12

我认为你的代码不错,

  1. 尝试通过点击 enter image description here 同步你的gradle。

  2. 尝试进入 File -- invalidate Caches 然后重新启动你的Android Studio。

此外,不要忘记在 onCreate() 中加入 ButterKnife.inject(this);


11

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'

请按照以下方法使用butterknife插件:

apply plugin: 'com.jakewharton.butterknife'

ButterKnife的最新版本语法上有一些变化,现在在使用ButterKnife注解时,你需要使用R2而不是R

具体来说:

不要写成

@BindView(R.id.textView)
TextView mTextView;
我们将会撰写。
@BindView(R2.id.textView)
TextView mTextView;

然后只需构建该项目。


2
这是一个巨大的变化。不幸的是,它没有在http://jakewharton.github.io/butterknife上得到记录或反映,并且https://github.com/JakeWharton/butterknife上的文档只部分反映了这种变化——页面上的早期代码示例使用R,而后来的示例使用R2。更不幸的是,你可以升级到8.5.1,而不改变任何R引用为R2,它仍然可以编译和运行——我现在有什么神秘的错误?这真是一团糟。 - Stevey
真是救命稻草啊。我试图调试了半个小时,结果发现版本代码是唯一的原因。扇自己一个耳光。 - A P

9

这个链接中设置ButterKnife的手动配置。

文件 -> 其他设置 -> 默认设置

编译器 -> 注释处理器 -> 勾选启用注释处理


在一年前这个答案是完美的,但现在Android Studio没有那些设置了。 - Stoycho Andreev
是的,但位置已更改:文件->其他设置->默认设置->构建、执行、部署->编译器*->注解处理器*->启用注解处理请注意,带有*的选项在子菜单下,您需要手动显示。此外,您可以在搜索字段上简单搜索“启用注释”,它将显示出来。 - Sierisimo

2

TextView tv1 声明移动到您的类中。还要调用 ButterKnife.inject(this); 方法。

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

}

1
在最新版本的ButterKnife库(8.5.1)中,不再使用@InjectView()注释。 您可以使用@BindView(Component)代替@InjectView(Component),并且不再使用Butterknife.inject(this),而是使用ButterKnife.bind(this)。

1

我尝试了所有的答案,但由于库中更改了一些内容,所以没有任何作用。请尝试使用@Bind代替@InjectView,这样会很好地工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接