0Pricing
Android Academy · Leçon

Événements de clic dans RecyclerView

Gérez les clics et les appuis longs sur les éléments de RecyclerView, transmettez les écouteurs de clic aux adaptateurs et naviguez vers un écran de détails lorsque l’utilisateur appuie sur un élément.

Événements de clic dans RecyclerView est une leçon Android Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 6. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Android Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Android Academy comprend 6 leçons au total.

Rendre les éléments de la liste cliquables

RecyclerView ne possède pas d’écouteur de clic intégré comme ListView. Vous devez ajouter les écouteurs de clic dans l’Adapter.

La méthode recommandée consiste à transmettre une lambda (fonction de rappel) au constructeur de l’Adapter. Lorsqu’un élément est sélectionné, l’Adapter appelle la lambda avec l’élément choisi — l’Activity gère ensuite le comportement à adopter.

Adapter avec fonction de rappel de clic

Ajoutez un paramètre lambda onItemClick à l’Adapter :

class FruitAdapter(
    private val fruits: List<Fruit>,
    private val onItemClick: (Fruit) -> Unit
) : RecyclerView.Adapter<FruitAdapter.ViewHolder>() {

    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val tvName: TextView = view.findViewById(R.id.tvName)
        val tvCalories: TextView = view.findViewById(R.id.tvCalories)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_fruit, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val fruit = fruits[position]
        holder.tvName.text = fruit.name
        holder.tvCalories.text = "${fruit.calories} kcal"
        // Set click listener on the whole item
        holder.itemView.setOnClickListener {
            onItemClick(fruit)
        }
    }

    override fun getItemCount() = fruits.size
}

Gérer les clics dans l’Activity

Dans l’Activity, transmettez une lambda qui ouvre l’écran de détails :

val adapter = FruitAdapter(fruits) { fruit ->
    // Called when user taps a fruit
    val intent = Intent(this, FruitDetailActivity::class.java)
    intent.putExtra("FRUIT_NAME", fruit.name)
    intent.putExtra("FRUIT_CALORIES", fruit.calories)
    startActivity(intent)
}

binding.recyclerView.apply {
    this.adapter = adapter
    layoutManager = LinearLayoutManager(this@MainActivity)
}

Recevoir les données dans l’écran de détails

Lisez les extras dans l’Activity de détails :

class FruitDetailActivity : AppCompatActivity() {

    private lateinit var binding: ActivityFruitDetailBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityFruitDetailBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val name = intent.getStringExtra("FRUIT_NAME") ?: "Unknown"
        val calories = intent.getIntExtra("FRUIT_CALORIES", 0)

        binding.tvDetailName.text = name
        binding.tvDetailCalories.text = "$calories kcal"
    }
}

DiffUtil pour des mises à jour efficaces

Lorsque les données de votre liste changent, n’appelez pas notifyDataSetChanged() : cela redessine tout. Utilisez plutôt DiffUtil :

  • Calcule la différence minimale entre les anciennes et les nouvelles listes
  • Anime uniquement les éléments modifiés
  • Améliore les performances et l’expérience utilisateur

La méthode moderne consiste à utiliser ListAdapter, qui exploite automatiquement DiffUtil.

ListAdapter avec DiffUtil

Étendez ListAdapter pour mettre à jour automatiquement la liste avec des animations :

class FruitAdapter(
    private val onItemClick: (Fruit) -> Unit
) : ListAdapter<Fruit, FruitAdapter.ViewHolder>(DIFF_CALLBACK) {

    companion object {
        val DIFF_CALLBACK = object : DiffUtil.ItemCallback<Fruit>() {
            override fun areItemsTheSame(old: Fruit, new: Fruit) =
                old.name == new.name
            override fun areContentsTheSame(old: Fruit, new: Fruit) =
                old == new  // data class equals()
        }
    }

    // ... ViewHolder and onCreateViewHolder same as before ...

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val fruit = getItem(position)  // use getItem(), not fruits[position]
        holder.tvName.text = fruit.name
        holder.itemView.setOnClickListener { onItemClick(fruit) }
    }
}

Soumettre de nouvelles listes

Avec ListAdapter, mettez la liste à jour en appelant submitList(). DiffUtil gère automatiquement l’animation :

// In Activity:
val adapter = FruitAdapter { fruit ->
    // handle click
}
binding.recyclerView.adapter = adapter

// Initial data
adapter.submitList(fruits)

// Later, update with new data (e.g. after filtering):
val filtered = fruits.filter { it.calories < 100 }
adapter.submitList(filtered)  // DiffUtil animates the change

Appui prolongé et menus contextuels

Vous pouvez également réagir aux appuis prolongés en définissant setOnLongClickListener dans onBindViewHolder :

  • Renvoyez true depuis l’écouteur pour consommer l’événement
  • Utilisez-le pour afficher une boîte de dialogue de suppression ou de modification
  • Ou implémentez la suppression par balayage avec ItemTouchHelper

Ajouter des décorations aux éléments

Ajoutez une séparation visuelle entre les éléments de la liste avec DividerItemDecoration :

binding.recyclerView.apply {
    adapter = fruitAdapter
    layoutManager = LinearLayoutManager(this@MainActivity)
    addItemDecoration(
        DividerItemDecoration(
            this@MainActivity,
            DividerItemDecoration.VERTICAL
        )
    )
}

Vérification rapide

Quelle est la méthode recommandée pour gérer les clics sur les éléments dans un Adapter RecyclerView ?

Récapitulatif : clics dans RecyclerView

Vous pouvez désormais créer des listes interactives :

  • Transmettre une fonction de rappel lambda au constructeur de l’Adapter
  • Dans onBindViewHolder, appeler holder.itemView.setOnClickListener
  • Accéder à un écran de détails en transmettant des extras via Intent
  • Utiliser ListAdapter et DiffUtil pour des mises à jour fluides et animées
  • Appeler submitList() pour mettre à jour les données affichées

Ensuite : conserver les données localement avec SharedPreferences.

Questions Fréquemment Posées

La leçon « Événements de clic dans RecyclerView » est-elle gratuite ?

Oui — le texte complet de « Événements de clic dans RecyclerView » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Android Academy, passe à CoddyKit PRO. Le cours Android Academy comprend 6 leçons au total.

Qu'est-ce que j'apprendrai dans « Événements de clic dans RecyclerView » ?

Gérez les clics et les appuis longs sur les éléments de RecyclerView, transmettez les écouteurs de clic aux adaptateurs et naviguez vers un écran de détails lorsque l’utilisateur appuie sur un élémen… Tu pratiques Android Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Android Academy ?

Aucune expérience préalable n'est requise. Android Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 6.

Combien de temps prend la leçon « Événements de clic dans RecyclerView » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Android Academy ?

Oui. Chaque leçon Android Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Collections Kotlin
  2. Bases de RecyclerView
  3. Événements de clic dans RecyclerView
  4. SharedPreferences
  5. Préférences DataStore
  6. Adaptateurs et DiffUtil
← Retour à Android Academy