Aller au contenu

Créer un adaptateur et ajouter le RecyclerView

Vous allez afficher les données dans un RecyclerView. Ce codelab suppose que vous savez comment fonctionnent RecyclerView, RecyclerView.ViewHolder et RecyclerView.Adapter.

9.1 Créer la classe WordListAdapter

  1. Créez un nouveau package adapter sous com.example.enetcom.roomwordsample.
  2. Créez une classe WordListAdapter qui étend RecyclerView.Adapter sous le package adapter. Voici le code :

    adapter/WordListAdapter.kt
    class WordListAdapter : RecyclerView.Adapter<WordListAdapter.WordViewHolder>() {
    
        // Copie en cache des mots. Elle est vide tant que les données ne sont pas prêtes :
        // getItemCount() est appelé avant l'arrivée des premières données.
        private var words: List<Word> = emptyList()
    
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WordViewHolder {
            val itemView = LayoutInflater.from(parent.context)
                .inflate(R.layout.recyclerview_item, parent, false)
            return WordViewHolder(itemView)
        }
    
        override fun onBindViewHolder(holder: WordViewHolder, position: Int) {
            holder.wordItemView.text = words[position].word
        }
    
        fun setWords(words: List<Word>) {
            this.words = words
            notifyDataSetChanged()
        }
    
        override fun getItemCount(): Int = words.size
    
        class WordViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
            val wordItemView: TextView = itemView.findViewById(R.id.textView)
        }
    }
    

Pas de null à gérer

Le système de types de Kotlin permet de démarrer avec une liste vide (emptyList()) plutôt qu'avec une valeur null : getItemCount() renvoie simplement 0 tant que les données ne sont pas arrivées, et il n'y a plus de cas particulier à traiter dans onBindViewHolder().

9.2 Ajouter RecyclerView à l'activité principale

  1. Allez dans activity_main.xml et localisez la balise include, puis ajoutez-lui content_main comme un ID :

    layout/activity_main.xml
    <include layout="@layout/content_main" android:id="@+id/content_main" />
    
  2. Ajoutez le RecyclerView dans la fonction onCreate() de MainActivity (après l'appel vers setContentView(binding.root)) :

    MainActivity.kt
    1
    2
    3
    val adapter = WordListAdapter()
    binding.contentMain.recyclerview.adapter = adapter
    binding.contentMain.recyclerview.setHasFixedSize(true)
    
  3. Exécutez votre application pour vous assurer que tout fonctionne. Il n'y a pas d'éléments car vous n'avez pas encore connecté les données.

Empty RecyclerView