mal*_*lli 23 java android dependency-injection onclick butterknife
我使用butterknife库完美地注入了视图.但是当我尝试实现监听器时,例如onclick我无法实现它们.以下java代码将帮助您了解我的问题.
Java代码:
public class LoginActivity extends ActionBarActivity{
@InjectView(R.id.toolbar) Toolbar toolbar;
@InjectView(R.id.btn_login) Button login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
ButterKnife.inject(this);
initialize();
//initListeners();
@OnClick(R.id.btn_login)
public void submit(View view) {
// TODO submit data to server...
}
}
/*private void initListeners() {
@OnClick(R.id.btn_login)
public void login(){
}
}*/
private void initialize() {
setSupportActionBar(toolbar);
getSupportActionBar().setIcon(R.drawable.toolbar_icon);
getSupportActionBar().setTitle(null);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
}
Run Code Online (Sandbox Code Playgroud)
告诉我它为什么会这样.代码有什么问题吗?我已经使用以下URL配置了与ButterKnife兼容的IDE.
http://stackoverflow.com/questions/27754811/onclick-is-not-working-in-implementation-of-butterknife-library
请就此问题向我提出任何建议.提前致谢..
vin*_*eti 15
MainActivity.java
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
public class MainActivity extends ActionBarActivity {
@InjectView(R.id.button)
Button login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
}
@OnClick(R.id.button)
void submitButton(View view) {
Toast.makeText(this, "Click", Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
和activity_main.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"
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">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="59dp"
android:layout_marginStart="59dp"
android:layout_marginTop="132dp"
/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
在build.gradle文件(app)中
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.jakewharton:butterknife:6.1.0'
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*kro 10
就我而言,这是我的解决方案
在gradle中添加classpath(Project)
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
Run Code Online (Sandbox Code Playgroud)
和gradle(模块)添加apply和apt
apply plugin: 'com.neenbedankt.android-apt'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.jakewharton:butterknife:8.2.1'
apt 'com.jakewharton:butterknife-compiler:8.2.1'
}
Run Code Online (Sandbox Code Playgroud)
文件java
@OnClick(R.id.btn_login)
public void submit(View view) {
// TODO submit data to server...
}
Run Code Online (Sandbox Code Playgroud)
使用注解之前,您应该先绑定butterKnife。
将这些依赖项添加到gradle.build
compile 'com.jakewharton:butterknife:8.4.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
然后添加绑定到onCreate ButterKnife.bind(this);
现在对Button执行代码。该方法应该是公开的,并且在butterKnife中,您不需要在XML中添加onClick。并且方法也应该位于onCreate之外,它将自动获取按钮,该按钮是使用方法上方给出的注释分配的,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
@OnClick(R.id.btn_login)
public void submit(View view){
//Do your code here.
}
Run Code Online (Sandbox Code Playgroud)