Binding dei componenti visuali in Android con Butter Knife

Mattepuffo's logo
Binding dei componenti visuali in Android con Butter Knife

Binding dei componenti visuali in Android con Butter Knife

Il binding dei componenti visuali in Android non è di per sè complicato, in quanto possiamo fare tutto con il metodo findViewById.

Però ho scoperto una libreria che ci permette di fare queste operazioni in una maniera più easy ancora: Butter Knife!

Non so se comporta miglioramenti anche a livello di prestazioni, ma secondo me riduce il codice scritto e lo rende un pò più chiaro.

Per usarlo dobbiamo aggiungere queste due righe tra le dipendenze di gradle:

dependencies {
    ......
	
    /* BUTTER KNIFE */
    compile 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}

Poi abbiamo questo semplice layout:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.mattepuffo.test.MainActivity">

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</android.support.constraint.ConstraintLayout>

Infine nella nostra Activity:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.tv)
    TextView tv;

    @BindView(R.id.button)
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this); // BINDING GLOBALE
    }

    @OnClick(R.id.button)
    public void clikkato() {
        tv.setText("CIAO!");
    }
}

Come vedete, con questa libreria usiamo le annotazioni, facendo il binding globale nel metodo onCreate.

Le annotazioni riguardano anche gli eventi, oltre ai componenti in se; e se guardate tra gli esempi su GitHub potete vedere altre cose interessanti.

Enjoy!


Condividi

Commentami!