fix(browse): Recycle on adapter clear

This commit is contained in:
Ahmad Ansori Palembani 2024-12-17 19:34:35 +07:00
parent fcaff92db1
commit 0d205f4a6d
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
3 changed files with 29 additions and 1 deletions

View file

@ -0,0 +1,24 @@
package eu.kanade.tachiyomi.ui.source.browse
import androidx.recyclerview.widget.RecyclerView
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.items.IFlexible
class BrowseSourceAdapter : FlexibleAdapter<IFlexible<*>>(null, null) {
private fun clearItems() {
allBoundViewHolders.forEach { holder ->
val item = getItem(holder.flexibleAdapterPosition) as? BrowseSourceItem ?: return@forEach
item.recycle()
}
}
override fun clear() {
clearItems()
super.clear()
}
override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) {
clearItems()
super.onDetachedFromRecyclerView(recyclerView)
}
}

View file

@ -165,7 +165,7 @@ open class BrowseSourceController(bundle: Bundle) :
super.onViewCreated(view)
// Initialize adapter, scroll listener and recycler views
adapter = FlexibleAdapter(null, this)
adapter = BrowseSourceAdapter()
setupRecycler(view)
binding.fab.isVisible = presenter.sourceFilters.isNotEmpty()

View file

@ -104,6 +104,10 @@ class BrowseSourceItem(
holder: BrowseSourceHolder?,
position: Int
) {
recycle()
}
fun recycle() {
job?.cancel()
job = null
}