Android Studio:整合Butterknife?

时间:2015-01-25 16:49:13

标签: android gradle android-studio butterknife

我正在尝试将Butterknife实现到我的android studio项目中。

然而,当我这样做时,我在@InjectView&#34上收到错误;无法解析符号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'
}

7 个答案:

答案 0 :(得分:20)

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

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

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

答案 1 :(得分:11)

我认为您的代码很好,

  1. 点击enter image description here

  2. 尝试同步您的论坛
  3. 尝试File - invalidate Caches并重启您的Android工作室。

  4. 另外,不要忘记将ButterKnife.inject(this);放在onCreate()

答案 2 :(得分:10)

所以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版本相比,语法略有改变,现在使用ButterKnfe注释时必须使用R2而不是R

具体来说:

而不是写

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

我们将写作

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

然后简单地构建项目。

答案 3 :(得分:9)

this link

设置ButterKnife的手动配置

档案 - &gt;其他设置 - &gt;默认设置

编译器 - &gt;注释处理器 - &gt;选中启用注释处理

答案 4 :(得分: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);
    }

}

答案 5 :(得分:1)

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

答案 6 :(得分:1)

在最新版本的ButterKnife库(8.5.1)中,未使用Traceback (most recent call last): File "C:\Users\INTEL\Desktop\Youtube bot\add3.py", line 2, in <module> clip1 = VideoFileClip ("intro.mp4",audio=True) File "C:\Python27\lib\site-packages\moviepy\video\io\VideoFileClip.py", line 57, in __init__ reader = FFMPEG_VideoReader(filename, pix_fmt=pix_fmt) File "C:\Python27\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 32, in __init__ infos = ffmpeg_parse_infos(filename, print_infos, check_duration) File "C:\Python27\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 241, in ffmpeg_parse_infos proc.terminate() File "C:\Python27\lib\subprocess.py", line 1002, in terminate _subprocess.TerminateProcess(self._handle, 1) WindowsError: [Error 5] Access is denied >>> 注释。

您可以使用@InjectView()代替@InjectView(组件),而不是使用@BindView(Component)使用Butterknife.inject(this)