@OnClick 在 ButterKnife 库的实现中不起作用

@OnClick is not working in implementation of ButterKnife Library

@OnClick 在 ButterKnife 库的实现中不起作用

当我点击 Button 时,没有任何反应。

这是我的完整代码:

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" />

谢谢

在你的 activity 中尝试添加..

 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,则需要 configure IDE 才能处理注释

使用 Butter Knife,您也可以像这样绑定您的视图...

 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...
    }
}

更多细节你可以看这个linkhttp://jakewharton.github.io/butterknife/

对于 运行 在 Android Studio 中遇到此问题的任何人,请确保在各自的构建文件中包含必要的依赖项和 apt 插件(查看 Butterknife 自述文件)。我匆匆浏览了文档,只包含了编译依赖,导致绑定失败。

仔细检查项目中的所有依赖项。这是自述文件的下载说明。 配置项目级别 build.gradle 以包含 'android-apt' 插件:

buildscript {
   repositories {
      mavenCentral()
   }
   dependencies {
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
   }
}

然后,在模块级别应用 'android-apt' 插件 build.gradle 并添加 Butter Knife 依赖项:

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' 插件,而是可以在声明编译器依赖项时将 apt 替换为 annotationProcessor。

在 Activity 的 onCreate() 中使用 ButterKnife.bind(this);。或片段的 onCreateView。

@OnClick(R.id.button_stop_sticky)
    public void onStopClicked(View v) {

        Toast.makeText(this, "onStop Clicked", Toast.LENGTH_LONG).show();

    }

显然,应用程序模块 > gradle 添加依赖项

compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'