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>

毕业文件:

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'
}
4

7 回答 7

20

请注意,在最新版本的 ButterKnife 库中,@InjectView()不再使用注解。

取而代之的是@Bind(R.id.tvHelloWorld)并被ButterKnife.bind(this);使用。

参考:http: //jakewharton.github.io/butterknife/

于 2015-08-16T20:23:57.803 回答
12

我觉得你的代码很好

  1. 尝试通过单击同步您的 gradle在此处输入图像描述

  2. 尝试去File-invalidate Caches并重新启动您的 Android 工作室。

另外,别忘了ButterKnife.inject(this);放入onCreate()

于 2015-01-25T16:55:44.347 回答
11

所以 ButterKnife 刚刚更新了版本8.5.1

要使用它,

在项目级别内添加以下行build.gradle

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

在 app-level 内添加以下行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 版本的语法略有不同的是,现在您必须使用R2而不是R使用 ButterKnfe 注释。

再具体一点:

而不是写

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

我们将写作

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

然后简单地构建项目。

于 2017-02-21T13:59:02.377 回答
9

从此链接为 ButterKnife 设置手动配置

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

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

于 2015-01-25T17:07:45.227 回答
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);
    }

}
于 2015-01-25T18:59:50.017 回答
1

我尝试了所有答案,但没有什么对我有用,因为在图书馆他们改变了一些东西。安装@InjectView 试试@Bind。它会正常工作

于 2016-01-21T15:02:01.810 回答
1

在最新版本的 ButterKnife 库(8.5.1)中,@InjectView()没有使用注解。

您可以使用@BindView(Component)而不是 @InjectView(Component) 而不是使用Butterknife.inject(this)use ButterKnife.bind(this)

于 2017-03-17T16:00:30.860 回答