Astuce utiliser Butter Knife pour injecter des vues sur Android

Dans cette astuce, vous apprendrez à intégrer la bibliothèque Butter Knife à vos projets pour instancier facilement les vues de votre mise en page dans le code de votre application..

introduction

Dans chaque application Android, vous devez utiliser le findViewById () méthode pour chaque vue de la présentation que vous souhaitez utiliser dans le code de votre application. Mais au fur et à mesure que les conceptions des applications prennent des dispositions plus complexes, l’appel à cette méthode devient répétitif et c’est là que la bibliothèque Butter Knife entre en jeu..

La bibliothèque Butter Knife, développée par Jake Wharton (Square Inc.) et gérée par elle, comporte des annotations qui aident les développeurs à instancier les vues de notre activité ou de notre fragment. Il a également des annotations pour gérer des événements tels que sur clic()onLongClick (), etc.

Dans l'exemple de projet de ce didacticiel, vous pouvez voir un exemple d'application avec une activité et un fragment avec une implémentation utilisant la bibliothèque Butter Knife et une implémentation normale. Explorons les étapes nécessaires à l'intégration de la bibliothèque Butter Knife.

1. Utilisation de la bibliothèque de couteaux à beurre

Étape 1: Ajouter la dépendance

Ajouter la dépendance suivante au projet build.gradle fichier:

compile 'com.jakewharton: butterknife: 6.1.0'

Ensuite, synchronisez votre projet avec ce fichier en appuyant sur le bouton de synchronisation..

Étape 2: Utiliser les annotations

Dans chaque activité ou fragment, vous devez supprimer ou commenter chaque appel du findViewById () méthode et ajouter le @InjectView annotation avant la déclaration de la variable, indiquant l'identifiant de la vue.

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

Étape 3: Injecter des vues

dans le onCreate () méthode de l'activité, avant d'utiliser les vues, appel injecter sur le Couteau à beurre objet.

ButterKnife.inject (this);

Si vous utilisez des fragments, vous devez spécifier la source des vues dans le onCreateView () méthode comme indiqué ci-dessous.

View view = inflater.inflate (R.layout.sample_fragment, null); ButterKnife.inject (this, vue);

Vous pouvez maintenant commencer à utiliser les vues dans le code de votre application. Butter Knife se chargera de l’instanciation de chaque vue.

C’est tout ce que vous avez à faire pour utiliser la bibliothèque Butter Knife dans une activité ou un fragment.Dans la section suivante, je vais vous montrer comment utiliser la bibliothèque Butter Knife pour utiliser les vues de liste..

2. Utilisation de la bibliothèque de couteaux à beurre avec des vues de liste

le ListView class est un cas particulier à implémenter, car vous instanciez les vues à l'intérieur d'un adaptateur. Pour intégrer la bibliothèque Butter Knife à une vue liste, vous devez d’abord créer la mise en page personnalisée des éléments de la vue liste. Je vais nommer le mien list_view_item et ajoutez la disposition suivante:

    

Dans cette disposition simple, nous allons montrer une image et du texte. Ensuite, nous devons créer l'adaptateur pour la vue liste. Nommons-le ListViewAdapter.

Classe publique ListViewAdapter étend BaseAdapter LayoutInflater inflater; public ListViewAdapter (LayoutInflater inflater) this.inflater = inflater;  @Override public int getCount () return 5;  @Override public Object getItem (int position) return null;  @Override public long getItemId (position int) return 0;  @Override public Voir getView (position int, View convertView, parent ViewGroup) return null;  classe statique ViewHolder public ViewHolder (Vue View) 

À l'intérieur de la classe d'adaptateur, il y a une classe statique appelée ViewHolder pour le garder en ordre. Nous allons utiliser cette classe pour contenir les vues. Mettons en œuvre le ViewHolder classe comme suit:

classe statique ViewHolder @InjectView (R.id.image_in_item) ImageView image; @InjectView (R.id.textview_in_item) TextView texte; public ViewHolder (Afficher la vue) ButterKnife.inject (this, view); 

Il ne nous reste plus qu'à modifier le getView () méthode comme suit:

public View getView (position int, View convertView, parent ViewGroup) Titulaire de ViewHolder; View view = inflater.inflate (R.layout.list_view_item, parent, false); titulaire = new ViewHolder (view); Picasso.with (inflater.getContext ()) .load ("http://lorempixel.com/200/200/sports/" + (position + 1)) .into (holder.image); holder.text.setText ("Ceci est un texte pour le numéro de l'image:" + position); retourner la vue; 

Dans cette méthode, je gonfle la mise en page personnalisée à l'intérieur de la vue variable et l'utiliser pour créer un objet de la ViewHolder classe. Notez que nous utilisons le Picasso classe pour charger des images distantes et remplir la vue texte avec du texte. Vous pouvez trouver le tutoriel Picasso utile si vous voulez vous familiariser avec cette bibliothèque..

N'oubliez pas d'ajouter le android.permission.Internet autorisation dans le manifeste Android. Sinon, Picasso ne pourra pas se connecter au Web et charger les images distantes..

Enfin, tout ce que vous avez à faire est d’instancier la vue liste et de connecter l’adaptateur. Je vais faire ça dans une nouvelle activité, ListViewActivity, comme indiqué ci-dessous. Vous pouvez voir un exemple de cette implémentation dans les fichiers source de ce tutoriel..

Classe publique ListViewActivity étend ActionBarActivity @InjectView (R.id.listView) ListView list; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_list_view); ButterKnife.inject (this); list.setAdapter (new ListViewAdapter ((LayoutInflater) getSystemService (LAYOUT_INFLATER_SERVICE))); 

3. événements

Vous pouvez également utiliser les annotations de Butter Knife pour les événements. Choisissez l'annotation que vous souhaitez utiliser, en fonction de l'événement que vous souhaitez répondre, et placez-la avant la méthode que vous souhaitez exécuter lorsque l'événement se produit..

@OnClick (R.id.sample_textview) public void showToastMessage () Toast.makeText (MainActivity.this, "Ceci est un message de l'activité", Toast.LENGTH_SHORT) .show (); 

Conclusion

Vous pouvez utiliser un couteau à beurre injecter() méthode partout où vous utiliseriez autrement le findViewById () méthode pour gagner du temps et éviter la répétition de code lorsque vous devez instancier les vues dans la présentation. N'hésitez pas à partager ce petit conseil si vous l'avez trouvé utile.