我正在尝试将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'
}
答案 0 :(得分:20)
请注意,在最新版本的ButterKnife库中,不再使用@InjectView()
注释。
使用@Bind(R.id.tvHelloWorld)
和ButterKnife.bind(this);
。
答案 1 :(得分:11)
我认为您的代码很好,
点击
尝试File
- invalidate Caches
并重启您的Android工作室。
另外,不要忘记将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)
答案 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)