Android: Make AdvancedMappingControlViewHolder a LifecycleOwner

This commit is contained in:
JosJuice
2025-05-13 19:32:15 +02:00
parent 5d7cba8cd9
commit 4b4a775d5a
3 changed files with 30 additions and 7 deletions

View File

@ -4,12 +4,16 @@ package org.dolphinemu.dolphinemu.features.input.ui
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.lifecycle.Lifecycle
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import org.dolphinemu.dolphinemu.databinding.ListItemAdvancedMappingControlBinding import org.dolphinemu.dolphinemu.databinding.ListItemAdvancedMappingControlBinding
import java.util.function.Consumer import java.util.function.Consumer
class AdvancedMappingControlAdapter(private val onClickCallback: Consumer<String>) : class AdvancedMappingControlAdapter(
RecyclerView.Adapter<AdvancedMappingControlViewHolder>() { private val parentLifecycle: Lifecycle,
private val onClickCallback: Consumer<String>
) : RecyclerView.Adapter<AdvancedMappingControlViewHolder>() {
private var controls = emptyArray<String>() private var controls = emptyArray<String>()
override fun onCreateViewHolder( override fun onCreateViewHolder(
@ -18,7 +22,7 @@ class AdvancedMappingControlAdapter(private val onClickCallback: Consumer<String
): AdvancedMappingControlViewHolder { ): AdvancedMappingControlViewHolder {
val inflater = LayoutInflater.from(parent.context) val inflater = LayoutInflater.from(parent.context)
val binding = ListItemAdvancedMappingControlBinding.inflate(inflater) val binding = ListItemAdvancedMappingControlBinding.inflate(inflater)
return AdvancedMappingControlViewHolder(binding, onClickCallback) return AdvancedMappingControlViewHolder(binding, parentLifecycle, onClickCallback)
} }
override fun onBindViewHolder(holder: AdvancedMappingControlViewHolder, position: Int) = override fun onBindViewHolder(holder: AdvancedMappingControlViewHolder, position: Int) =
@ -30,4 +34,19 @@ class AdvancedMappingControlAdapter(private val onClickCallback: Consumer<String
this.controls = controls this.controls = controls
notifyDataSetChanged() notifyDataSetChanged()
} }
override fun onViewRecycled(holder: AdvancedMappingControlViewHolder) {
super.onViewRecycled(holder)
holder.onViewRecycled()
}
override fun onViewAttachedToWindow(holder: AdvancedMappingControlViewHolder) {
super.onViewAttachedToWindow(holder)
holder.onViewAttachedToWindow()
}
override fun onViewDetachedFromWindow(holder: AdvancedMappingControlViewHolder) {
super.onViewDetachedFromWindow(holder)
holder.onViewDetachedFromWindow()
}
} }

View File

@ -2,14 +2,17 @@
package org.dolphinemu.dolphinemu.features.input.ui package org.dolphinemu.dolphinemu.features.input.ui
import androidx.recyclerview.widget.RecyclerView import androidx.lifecycle.Lifecycle
import org.dolphinemu.dolphinemu.databinding.ListItemAdvancedMappingControlBinding import org.dolphinemu.dolphinemu.databinding.ListItemAdvancedMappingControlBinding
import org.dolphinemu.dolphinemu.utils.LifecycleViewHolder
import java.util.function.Consumer import java.util.function.Consumer
class AdvancedMappingControlViewHolder( class AdvancedMappingControlViewHolder(
private val binding: ListItemAdvancedMappingControlBinding, private val binding: ListItemAdvancedMappingControlBinding,
parentLifecycle: Lifecycle,
onClickCallback: Consumer<String> onClickCallback: Consumer<String>
) : RecyclerView.ViewHolder(binding.root) { ) : LifecycleViewHolder(binding.root, parentLifecycle) {
private lateinit var name: String private lateinit var name: String
init { init {

View File

@ -38,8 +38,9 @@ class AdvancedMappingDialog(
ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, devices) ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, devices)
binding.dropdownDevice.setAdapter(deviceAdapter) binding.dropdownDevice.setAdapter(deviceAdapter)
controlAdapter = controlAdapter = AdvancedMappingControlAdapter(lifecycle) {
AdvancedMappingControlAdapter { control: String -> onControlClicked(control) } control: String -> onControlClicked(control)
}
binding.listControl.adapter = controlAdapter binding.listControl.adapter = controlAdapter
binding.listControl.layoutManager = LinearLayoutManager(context) binding.listControl.layoutManager = LinearLayoutManager(context)