@OnClick不能用于ButterKnife库的实现

时间:2015-01-03 12:23:21

标签: android butterknife

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

由于

6 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:10)

正如Butterknife文档中所提到的,如果您正在使用Eclipse,那么在处理注释之前,您需要configure IDE

答案 2 :(得分:3)

在您的活动中尝试添加..

 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();
 }

答案 3 :(得分:3)

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

($result | % { [Convert]::ToString($_, 2).PadLeft(8,'0')})

然后,应用&#39; android-apt&#39;你的模块级build.gradle中的插件并添加Butter Knife依赖项:

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

注意:如果您使用版本为2.2.0或更高版本的新Jack编译器,则不需要&#39; android-apt&#39;在声明编译器依赖时,插件可以替换apt和annotationProcessor。

答案 4 :(得分:3)

在活动的onCreate()中使用ButterKnife.bind(this);。或onCreateView for Fragment。

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

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

    }

显然,app模块&gt; gradle添加依赖

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

答案 5 :(得分:0)

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

有关详情,您可以看到此链接http://jakewharton.github.io/butterknife/