[Android] Improve the SimpleAdapter click handler

Nicolas Pomepuy git at videolan.org
Fri Mar 14 09:31:18 UTC 2025


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Thu Mar 13 15:25:16 2025 +0100| [cae696fd0fcaebd0a80e41f01947fd70cdf69172] | committer: Nicolas Pomepuy

Improve the SimpleAdapter click handler

> https://code.videolan.org/videolan/vlc-android/commit/cae696fd0fcaebd0a80e41f01947fd70cdf69172
---

 application/vlc-android/res/layout/simple_item.xml |  6 +++---
 .../src/org/videolan/vlc/gui/SimpleAdapter.kt      | 24 +++++++++++++++++++---
 2 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/application/vlc-android/res/layout/simple_item.xml b/application/vlc-android/res/layout/simple_item.xml
index a4b16e831d..71d36d9153 100644
--- a/application/vlc-android/res/layout/simple_item.xml
+++ b/application/vlc-android/res/layout/simple_item.xml
@@ -18,8 +18,8 @@
                 type="android.graphics.drawable.BitmapDrawable" />
 
         <variable
-                name="handler"
-                type="org.videolan.vlc.gui.SimpleAdapter.ClickHandler" />
+                name="holder"
+                type="org.videolan.vlc.gui.SimpleAdapter.ViewHolder" />
 
         <variable
             name="imageWidth"
@@ -42,7 +42,7 @@
         android:background="?attr/video_list_background"
         android:focusable="true"
         android:foreground="?attr/selectableItemBackground"
-        android:onClick="@{(v) -> handler.onClick(position)}"
+        android:onClick="@{holder::onClick}"
         android:orientation="horizontal"
         android:padding="8dp">
 
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/SimpleAdapter.kt b/application/vlc-android/src/org/videolan/vlc/gui/SimpleAdapter.kt
index db5a9913a2..aa37febe20 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/SimpleAdapter.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/SimpleAdapter.kt
@@ -2,6 +2,7 @@ package org.videolan.vlc.gui
 
 import android.graphics.drawable.BitmapDrawable
 import android.view.LayoutInflater
+import android.view.View
 import android.view.ViewGroup
 import androidx.recyclerview.widget.DiffUtil
 import androidx.recyclerview.widget.ListAdapter
@@ -35,7 +36,7 @@ class SimpleAdapter(val handler: ClickHandler) : ListAdapter<MediaLibraryItem, S
 
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
         if (!this::inflater.isInitialized) inflater = LayoutInflater.from(parent.context)
-        return ViewHolder(handler, SimpleItemBinding.inflate(inflater, parent, false))
+        return ViewHolder(SimpleItemBinding.inflate(inflater, parent, false))
     }
 
     override fun onBindViewHolder(holder: ViewHolder, position: Int) {
@@ -52,20 +53,37 @@ class SimpleAdapter(val handler: ClickHandler) : ListAdapter<MediaLibraryItem, S
         }
     }
 
+    override fun onBindViewHolder(holder: ViewHolder, position: Int, payloads: MutableList<Any>) {
+        if (payloads.isNullOrEmpty())
+            super.onBindViewHolder(holder, position, payloads)
+        else {
+            payloads.forEach {
+                when (it) {
+                    UPDATE_SELECTION -> holder.selectView(multiSelectHelper.isSelected(position))
+                }
+            }
+        }
+    }
+
     fun isEmpty() = itemCount == 0
 
     override fun getItem(position: Int): MediaLibraryItem? {
         return if (position in 0 until itemCount) super.getItem(position) else null
     }
 
-    inner class ViewHolder(handler: ClickHandler,  binding: SimpleItemBinding) :  SelectorViewHolder<SimpleItemBinding>(binding) {
+    inner class ViewHolder(binding: SimpleItemBinding) :  SelectorViewHolder<SimpleItemBinding>(binding) {
         init {
-            binding.handler = handler
+            binding.holder = this
         }
 
         override fun selectView(selected: Boolean) {
             binding.setVariable(BR.selected, selected)
         }
+
+        fun onClick(@Suppress("UNUSED_PARAMETER") v: View) {
+            handler.onClick(layoutPosition)
+        }
+
     }
 
 }
\ No newline at end of file



More information about the Android mailing list