studio jakewharton ejemplo java android dependency-injection onclick butterknife

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