Android ButterKnife

我已经安装了ButterKnife我的build.gradle看起来像这样:

 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.3.0' compile 'com.jakewharton:butterknife:8.4.0' } 

我的loginActivity看起来像这样:

 package com.example.egen.forum; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Toast; import butterknife.ButterKnife; import butterknife.OnClick; public class LoginActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); ButterKnife.bind(this); Toast.makeText(getApplicationContext(), "Your toast message.", Toast.LENGTH_SHORT).show(); } @OnClick(R.id.btnLogin) public void test() { Toast.makeText(getApplicationContext(), "Your toast message.", Toast.LENGTH_SHORT).show(); } } 

第二次吐司没有出现。 我在这做错了什么?

您还没有为ButterKnife代码生成包含注释处理器。 就像在GitHub页面上描述的那样:

 dependencies { compile 'com.jakewharton:butterknife:8.4.0' annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' } 

并应用插件:

 apply plugin: 'com.jakewharton.butterknife' 

否则,您的代码看起来很好。

说明:ButterKnife库使用注释处理器生成代码,该代码提供对视图的引用并执行ButterKnife注释方法。 如果您重建项目,并且AndroidStudio显示@OnClick注释的方法未使用,那么事情就错了。 如果注释处理器已提供且工作正常,则应显示为已使用并导致生成的方法。

添加此行:

 annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' 

以及你的build.gradle。

有关详细信息,请参见此处

好吧,Butterknife是昨天,使用数据绑定代替: https : //developer.android.com/topic/libraries/data-binding/index.html 。 这几乎是开箱即用的工具