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

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

è 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.

Questo articolo contiene link di affiliazione: acquisti o ordini effettuati tramite tali link permetteranno al nostro sito di ricevere una commissione nel rispetto del codice etico. Le offerte potrebbero subire variazioni di prezzo dopo la pubblicazione.

Ti consigliamo anche