Android @OnClick在ButterKnife库的实现中不起作用
Android @OnClick在ButterKnife库的实现中不起作用,android,butterknife,Android,Butterknife,@OnClick在ButterKnife库的实现中不起作用 当我点击按钮时,什么都没有发生 这是我的完整代码: public class MainActivity extends ActionBarActivity { @InjectView(R.id.edit_user) EditText username; @InjectView(R.id.edit_pass) EditText password; @OnClick(R.id.btn) vo
@OnClick
在ButterKnife库的实现中不起作用
当我点击按钮时,什么都没有发生
这是我的完整代码:
public class MainActivity extends ActionBarActivity {
@InjectView(R.id.edit_user)
EditText username;
@InjectView(R.id.edit_pass)
EditText password;
@OnClick(R.id.btn)
void submit() {
// TODO call server...
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
// TODO Use "injected" views...
}
}
这是我的xml:
<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" >
<EditText
android:id="@+id/edit_user"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="user" />
<EditText
android:id="@+id/edit_pass"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="user" />
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
感谢您在活动中尝试添加
ButterKnife.inject(this);
检查此代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
}
@OnClick(R.id.buttonAlert)
public void alertClicked(View v){
new AlertDialog.Builder(v.getContext())
.setMessage(getFormattedMessge())
.setNeutralButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.show();
}
正如Butterknife文档中提到的,如果您使用的是Eclipse,则需要先打开IDE,然后才能使用Butterknife处理注释。您还可以像这样绑定视图
class ExampleActivity extends Activity {
@Bind(R.id.title)
TextView title;
@Bind(R.id.subtitle)
TextView subtitle;
@Bind(R.id.footer)
TextView footer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.bind(this);
// TODO Use fields...
}
}
有关更多详细信息,您可以查看此链接对于在Android Studio中遇到此问题的任何人,请确保您在各自的构建文件中包含了必要的依赖项和apt插件(请查看Butterknife自述)。我匆匆浏览了文档,只包含了编译依赖项,这导致绑定以静默方式失败。仔细检查项目中的所有依赖项。以下是自述文件的下载说明。
配置您的项目级build.gradle以包含“android apt”插件:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
然后,在模块级build.gradle中应用“android apt”插件,并添加黄油刀依赖项:
apply plugin: 'android-apt'
android {
...
}
dependencies {
compile 'com.jakewharton:butterknife:8.2.1'
apt 'com.jakewharton:butterknife-compiler:8.2.1'
}
注意:如果您正在使用版本为2.2.0或更高版本的新Jack编译器,则不需要“android apt”插件,可以在声明编译器依赖项时用annotationProcessor替换apt。使用ButterKnife.bind(此)活动的onCreate()中的代码>。或片段的onCreateView
@OnClick(R.id.button_stop_sticky)
public void onStopClicked(View v) {
Toast.makeText(this, "onStop Clicked", Toast.LENGTH_LONG).show();
}
显然,app module>gradle添加了依赖项
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
您是否调用了ButterKnife.inject(这个,视图)代码>或黄油刀。注入(此)代码>?ButterKnife.注入(此)@shayanpourvatan必须更改ButterKnife.inject(this)到ButterKnife.inject(this,view)?您可以从活动调用此功能,或者从片段调用此功能,如果您从活动调用此功能就足够了,但是如果您在片段或适配器中,您必须将视图传递给我使用的活动,是否需要启用批注?.inject已更改。在最新库中绑定您可以查看此链接以了解更多详细信息: