Android Studio:集成 Butterknife?

Android Studio: Integrating Butterknife?

我正在尝试将 Butterknife 实施到我的 android 工作室项目中。

然而,当我这样做时,我在 @InjectView "cannot resolve symbol InjectView" 上收到错误消息。

我没有成功实施 Butterknife 吗?

Activity代码:

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

我觉得你的代码很好,

  1. 尝试通过单击

  2. 来同步您的 gradle
  3. 尝试去 File -- invalidate Caches 并重新启动你的 Android 工作室。

此外,不要忘记将 ButterKnife.inject(this); 放入 onCreate()

this link

为 ButterKnife 设置手动配置

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

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

TextView tv1 声明移到 class 中。 同时调用 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);
    }

}

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

而是使用 @Bind(R.id.tvHelloWorld)ButterKnife.bind(this);

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

我尝试了所有的答案,但没有任何答案对我有用,因为在图书馆中他们改变了一些东西。代替@InjectView 试试@Bind。它将正常工作

所以 ButterKnife 刚刚更新了版本 8.5.1

要使用它,

在 project-level 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 版本相比,语法上的一个小变化是,现在您在使用 ButterKnfe 注释时必须使用 R2 而不是 R

具体来说:

而不是写作

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

我们会写

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

然后简单地构建项目。

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

您可以使用 @BindView(Component) 而不是 @InjectView(Component) 并且可以使用 ButterKnife.bind(this)

而不是 Butterknife.inject(this)