java - ejemplo - implementation com jakewharton butterknife 7.0 1
ButterKnife onclick no funciona (5)
Inyecté vistas perfectamente utilizando la biblioteca de Butterknife. Pero cuando intento implementar escuchas, por ejemplo, en un onclick
no puedo implementarlas. Seguir el código java te ayudará a entender mi problema.
Código de 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);
}
}
Dime por qué está sucediendo. ¿Algún error en el código? Ya configuré el IDE que es compatible con ButterKnife usando la siguiente URL.
http://stackoverflow.com/questions/27754811/onclick-is-not-working-in-implementation-of-butterknife-library
Por favor, dame alguna sugerencia sobre este tema. Gracias por adelantado..
Asegúrate de agregar todas las dependencias requeridas
dependencies {
compile ''com.jakewharton:butterknife:8.4.0''
annotationProcessor ''com.jakewharton:butterknife-compiler:8.4.0''
}
Debes tener que unir ButterKnife antes de usar las anotaciones.
Añade estas dependencias a gradle.build
compile ''com.jakewharton:butterknife:8.4.0'' annotationProcessor ''com.jakewharton:butterknife-compiler:8.4.0''
A continuación, agregue bind a onCreate ButterKnife.bind(this);
Ahora haz el código al botón. El método debe ser público y en butterKnife, no es necesario que agregue el onClick en XML. Y el método también debe estar fuera de onCreate. Obtendrá automáticamente el botón que asigne utilizando la anotación que se indica arriba en el método.
@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.
}
En mi caso esta es mi solución.
agregar classpath en gradle ( Proyecto )
buildscript {
repositories {
jcenter()
}
dependencies {
classpath ''com.android.tools.build:gradle:2.1.0''
classpath ''com.neenbedankt.gradle.plugins:android-apt:1.8''
}
}
y gradle ( Módulo ) añadir aplicar y apto
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''
}
archivo java
@OnClick(R.id.btn_login)
public void submit(View view) {
// TODO submit data to server...
}
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();
}
}
y la parte 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>
en el archivo build.gradle (aplicación)
dependencies {
compile fileTree(dir: ''libs'', include: [''*.jar''])
compile ''com.android.support:appcompat-v7:22.0.0''
compile ''com.jakewharton:butterknife:6.1.0''
}
@OnClick
mover su @OnClick
fuera del método onCreate
, como lo hice a continuación en el fragmento de código.
El código que publiqué a continuación debería funcionar como debería (también uso ButterKnife
).
public class LoginActivity extends ActionBarActivity{
@InjectView(R.id.toolbar) Toolbar toolbar;
@InjectView(R.id.btn_login) Button login;
@OnClick(R.id.btn_login)
public void submit(View view) {
// TODO submit data to server...
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
ButterKnife.inject(this);
initialize();
}
private void initialize() {
setSupportActionBar(toolbar);
getSupportActionBar().setIcon(R.drawable.toolbar_icon);
getSupportActionBar().setTitle(null);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
}