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'
}
我觉得你的代码很好,
尝试通过单击
来同步您的 gradle
尝试去 File
-- invalidate Caches
并重新启动你的 Android 工作室。
此外,不要忘记将 ButterKnife.inject(this);
放入 onCreate()
为 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);
。
我尝试了所有的答案,但没有任何答案对我有用,因为在图书馆中他们改变了一些东西。代替@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)
我正在尝试将 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'
}
我觉得你的代码很好,
尝试通过单击
来同步您的 gradle
尝试去
File
--invalidate Caches
并重新启动你的 Android 工作室。
此外,不要忘记将 ButterKnife.inject(this);
放入 onCreate()
文件 -> 其他设置 -> 默认设置
编译器 -> 注释处理器 -> 勾选启用注释处理
将 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);
。
我尝试了所有的答案,但没有任何答案对我有用,因为在图书馆中他们改变了一些东西。代替@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)