Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Butterknife ed il binding dei componenti visuali

Analizziamo la libreria Butterknife e la sua utilità nel binding dei componenti visuali durante lo sviluppo di applicazioni Java per Android.
Analizziamo la libreria Butterknife e la sua utilità nel binding dei componenti visuali durante lo sviluppo di applicazioni Java per Android.
Link copiato negli appunti

Il problema

Prima di presentare la libreria è bene fare un breve cappello introduttivo utile a descrivere il contesto e le
motivazioni che hanno spinto alla realizzazione di ButterKnife. Nello sviluppo su piattaforma Android, la
definizione dell'interfaccia si divide normalmente in due parti: una definizione del layout su
uno o più file xml, ed un backend scritto in Java che si occupa di controllare i comportamenti dell'interfaccia
stessa nonché della sua interazione con il resto dell'applicazione.

Il cosidetto binding tra layout xml e componenti consente di pilotare il layout delle componenti e gli
eventi ad essi associate direttamente dalle classi Java. Prendiamo ad esempio l'activity riportata in Figura
1:

Figura 1. Activity d'esempio
activity d'esempio

La sua definizione sottoforma di layout xml è:

<?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="it.html.android.libraries.myapplication.MainActivity">
    <TextView
        android:id="@+id/txtSaluti"
        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/btnPremi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Premi"
        tools:layout_editor_absoluteX="146dp"
        tools:layout_editor_absoluteY="297dp" />
</android.support.constraint.ConstraintLayout>

Mentre la activity è così definita:

package it.html.android.libraries.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TextView tvGreetings= (TextView) findViewById(R.id.txtSaluti);
        Button btnPremi=(Button)findViewById(R.id.btnPremi);
        btnPremi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tvGreetings.setText("Ciao mondo!");
            }
        });
    }
}

Con il metodo findViewById l'activity recupera le view, è quindi
possibile
definire i listener per i vari eventi o modificarne gli attributi. Il codice sopra riportato consente di intravedere il problema: all'aumentare
della
complessità dell'interfaccia, e di conseguenza dei suoi componenti,
l'activity o il fragment associato diventano una lunga sequenza di richiami di findViewBy per
recuperare i componenti visuali e, subito dopo, una lunga sequenza di definizione di listener associati ai vari
eventi. Il codice alla lunga diventa poco comprensibile.

Binding delle view con Butterknife

Butterknife è una libreria open source realizzata per rendere
più semplice il collegamento
tra la parte xml del layout e la sua controparte Java. Si basa sull'uso di annotazioni e di un processore di
annotazioni che in fase di compilazione
provvede a generare il codice in grado svolgere questo compito per noi. Rivediamo ora l'esempio precedente con l'uso di Butterknife:

package it.html.android.libraries.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
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.txtSaluti) TextView tvGreetings;
    @BindView(R.id.btnPremi) Button btnPremi;
    @OnClick(R.id.btnPremi)
    public void submit(View view) {
        tvGreetings.setText("Ciao mondo!");
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
    }
}

Il binding con ButterKnife avviene mediante le annotazioni @BindView
per
le view e @OnClick per l'evento click del pulsante btnPremi. Il processore di
annotazione
provvede a generare il codice necessario alla gestione del binding. Con il metodo
ButterKnife.bind(this)
viene effettuato il collegamento tra le view ed i relativi attributi nella classe activity main.

Ti consigliamo anche