Suggerimento rapido utilizzare Butter Knife per iniettare viste su Android

In questo suggerimento rapido, imparerai come integrare la libreria Butter Knife nei tuoi progetti per istanziare facilmente le viste nel tuo layout nel codice dell'applicazione.

introduzione

In ogni applicazione Android, devi usare il findViewById () metodo per ogni vista nel layout che si desidera utilizzare nel codice dell'applicazione. Ma come i progetti delle applicazioni ottengono layout più complessi, la chiamata a questo metodo diventa ripetitiva ed è qui che entra in gioco la libreria Butter Knife.

La libreria Butter Knife, sviluppatrice e gestita da Jake Wharton (Square Inc.), contiene annotazioni che aiutano gli sviluppatori a creare istantanee delle viste dalla nostra attività o frammento. Ha anche annotazioni per gestire eventi come al clic()onLongClick (), eccetera.

Nel progetto di esempio di questo tutorial, è possibile vedere un'applicazione di esempio con un'attività e un frammento con un'implementazione utilizzando la libreria Butter Knife e un'implementazione regolare. Esploriamo i passaggi necessari per integrare la libreria Butter Knife.

1. Utilizzando la libreria Butter Knife

Passaggio 1: aggiungere la dipendenza

Aggiungi la seguente dipendenza a quella del progetto build.gradle file:

compila 'com.jakewharton: butterknife: 6.1.0'

Successivamente, sincronizzare il progetto con questo file premendo il pulsante di sincronizzazione.

Passaggio 2: utilizzare le annotazioni

In ogni attività o frammento, devi rimuovere o commentare ogni chiamata di findViewById () metodo e aggiungere il @InjectView annotazione prima della dichiarazione della variabile, che indica l'identificatore della vista.

@InjectView (R.id.sample_textview) TextView sample_textview;

Passaggio 3: inserire le viste

Nel onCreate () metodo dell'attività, prima di utilizzare qualsiasi vista, chiamata iniettare sul Coltello da burro oggetto.

ButterKnife.inject (questo);

Se si utilizzano i frammenti, è necessario specificare l'origine delle viste in onCreateView () metodo come mostrato di seguito.

Visualizza view = inflater.inflate (R.layout.sample_fragment, null); ButterKnife.inject (questo, vista);

Ora puoi iniziare a utilizzare le visualizzazioni nel codice dell'applicazione. Butter Knife gestirà l'istanziazione di ogni singola visualizzazione per te.

Questo è tutto quello che devi fare per utilizzare la libreria Butter Knife in un'attività o un frammento. Nella prossima sezione, ti mostrerò come utilizzare la libreria Butter Knife per l'utilizzo delle visualizzazioni elenco.

2. Utilizzo della libreria Butter Butter con viste elenco

Il Visualizzazione elenco la classe è un caso speciale da implementare, poiché si istanziano le viste all'interno di un adattatore. Per integrare la libreria Butter Knife in una visualizzazione elenco, è innanzitutto necessario creare il layout personalizzato per gli elementi nella visualizzazione elenco. Chiamerò il mio LIST_VIEW_ITEM e aggiungi il seguente layout:

    

In questo semplice layout, mostreremo un'immagine e del testo. Successivamente, dobbiamo creare l'adattatore per la visualizzazione elenco. Diamo un nome ListViewAdapter.

ListViewAdapter di classe pubblica estende BaseAdapter LayoutInflater inflater; public ListViewAdapter (LayoutInflater inflater) this.inflater = inflater;  @Override public int getCount () return 5;  @Override oggetto pubblico getItem (int position) return null;  @Override public long getItemId (int position) return 0;  @Override public Visualizza getView (int position, Visualizza convertView, ViewGroup parent) return null;  classe statica ViewHolder public ViewHolder (visualizzazione vista) 

All'interno della classe dell'adattatore, c'è una classe statica chiamata ViewHolder per tenerlo in ordine Utilizzeremo questa classe per contenere le visualizzazioni. Implementiamo il ViewHolder classe come segue:

classe statica ViewHolder @InjectView (R.id.image_in_item) Immagine ImageView; @InjectView (R.id.textview_in_item) Testo TextView; public ViewHolder (Visualizza vista) ButterKnife.inject (this, view); 

Tutto quello che dobbiamo fare ora è modificare il GetView () metodo come segue:

public View getView (int position, Visualizza convertView, ViewGroup parent) Titolare ViewHolder; Visualizza view = inflater.inflate (R.layout.list_view_item, parent, false); holder = new ViewHolder (view); Picasso.with (inflater.getContext ()) .load ("http://lorempixel.com/200/200/sports/" + (posizione + 1)) .into (holder.image); holder.text.setText ("Questo è un testo per il numero dell'immagine:" + position); vista di ritorno; 

In questo metodo, sto gonfiando il layout personalizzato all'interno del vista variabile e usarlo per creare un oggetto di ViewHolder classe. Nota che stiamo usando il Picasso classe per caricare immagini remote e popolare la visualizzazione del testo con del testo. Puoi trovare utile il tutorial di Picasso se vuoi familiarizzare con questa libreria.

Non dimenticare di aggiungere il android.permission.INTERNET permesso nel manifest di Android. In caso contrario, Picasso non sarà in grado di connettersi al Web e caricare le immagini remote.

Infine, tutto ciò che devi fare è istanziare la vista elenco e collegare l'adattatore. Lo farò all'interno di una nuova attività, ListViewActivity, come mostrato di seguito. Puoi vedere un esempio di questa implementazione nei file sorgente di questo tutorial.

public class ListViewActivity estende ActionBarActivity @InjectView (R.id.listView) Elenco ListView; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_list_view); ButterKnife.inject (questo); list.setAdapter (new ListViewAdapter ((LayoutInflater) getSystemService (LAYOUT_INFLATER_SERVICE))); 

3. Eventi

Puoi anche usare le annotazioni di Butter Knife per gli eventi. Scegli l'annotazione che desideri utilizzare, in base all'evento a cui vuoi rispondere e mettila prima del metodo che vuoi eseguire quando l'evento accade.

@OnClick (R.id.sample_textview) public void showToastMessage () Toast.makeText (MainActivity.this, "Questo è un messaggio dall'attività", Toast.LENGTH_SHORT) .show (); 

Conclusione

Puoi usare Butter Knife iniettare() metodo ovunque altrimenti utilizzeresti il findViewById () metodo per risparmiare tempo ed evitare la ripetizione del codice quando è necessario creare un'istanza delle viste nel layout. Sentiti libero di condividere questo suggerimento se lo hai trovato utile.