Android Studio:整合Butterknife?

and*_*999 14 android gradle android-studio butterknife

我正在尝试将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);



    }
}
Run Code Online (Sandbox Code Playgroud)

布局:

<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>
Run Code Online (Sandbox Code Playgroud)

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'
}
Run Code Online (Sandbox Code Playgroud)

RWI*_*WIL 20

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

在代替@Bind(R.id.tvHelloWorld)ButterKnife.bind(this);使用.

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


bji*_*ang 11

我觉得你的代码很好,

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

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

另外,不要忘了把ButterKnife.inject(this);onCreate()


Chi*_*oni 11

所以ButterKnife刚刚更新了版本 8.5.1

要使用它,

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

classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
Run Code Online (Sandbox Code Playgroud)

在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'
Run Code Online (Sandbox Code Playgroud)

应用butterknife插件如下:

apply plugin: 'com.jakewharton.butterknife'
Run Code Online (Sandbox Code Playgroud)

语法与以前的ButterKnife版本稍有不同,现在你必须使用R2而不是R使用ButterKnfe注释.

再具体一点:

而不是写作

@BindView(R.id.textView)
TextView mTextView;
Run Code Online (Sandbox Code Playgroud)

我们会写作

@BindView(R2.id.textView)
TextView mTextView;
Run Code Online (Sandbox Code Playgroud)

然后简单地构建项目.

  • 这是一个巨大的变化.遗憾的是,它没有记录或反映在http://jakewharton.github.io/butterknife上,https://github.com/JakeWharton/butterknife上的文档仅部分反映了这一变化 - 页面上的早期代码示例使用R,后者使用R2.同样不幸的是你可以升级到8.5.1,而不是将你的任何R引用更改为R2,它仍然可以编译和运行 - 我现在遇到了什么样的神秘错误?这是一团糟. (2认同)

Kus*_*rma 9

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

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

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