[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