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.ViewGroup
import androidx.lifecycle.Lifecycle
import androidx.recyclerview.widget.RecyclerView
import org.dolphinemu.dolphinemu.databinding.ListItemAdvancedMappingControlBinding
import java.util.function.Consumer
class AdvancedMappingControlAdapter(private val onClickCallback: Consumer<String>) :
RecyclerView.Adapter<AdvancedMappingControlViewHolder>() {
class AdvancedMappingControlAdapter(
private val parentLifecycle: Lifecycle,
private val onClickCallback: Consumer<String>
) : RecyclerView.Adapter<AdvancedMappingControlViewHolder>() {
private var controls = emptyArray<String>()
override fun onCreateViewHolder(
@ -18,7 +22,7 @@ class AdvancedMappingControlAdapter(private val onClickCallback: Consumer<String
): AdvancedMappingControlViewHolder {
val inflater = LayoutInflater.from(parent.context)
val binding = ListItemAdvancedMappingControlBinding.inflate(inflater)
return AdvancedMappingControlViewHolder(binding, onClickCallback)
return AdvancedMappingControlViewHolder(binding, parentLifecycle, onClickCallback)
}
override fun onBindViewHolder(holder: AdvancedMappingControlViewHolder, position: Int) =
@ -30,4 +34,19 @@ class AdvancedMappingControlAdapter(private val onClickCallback: Consumer<String
this.controls = controls
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
import androidx.recyclerview.widget.RecyclerView
import androidx.lifecycle.Lifecycle
import org.dolphinemu.dolphinemu.databinding.ListItemAdvancedMappingControlBinding
import org.dolphinemu.dolphinemu.utils.LifecycleViewHolder
import java.util.function.Consumer
class AdvancedMappingControlViewHolder(
private val binding: ListItemAdvancedMappingControlBinding,
parentLifecycle: Lifecycle,
onClickCallback: Consumer<String>
) : RecyclerView.ViewHolder(binding.root) {
) : LifecycleViewHolder(binding.root, parentLifecycle) {
private lateinit var name: String
init {

View File

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