From d2ce85ad75dbb38adbe17bc928232665f7cbe7c6 Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Sun, 25 Aug 2024 19:29:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/base/adapter/DiffRecyclerAdapter.kt | 46 +++++++++--------- .../app/base/adapter/RecyclerAdapter.kt | 48 +++++++++---------- .../style1/books/BaseBooksAdapter.kt | 7 +++ .../style1/books/BooksAdapterList.kt | 5 +- 4 files changed, 56 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt b/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt index c66078be9..21bf2c6cb 100644 --- a/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt +++ b/app/src/main/java/io/legado/app/base/adapter/DiffRecyclerAdapter.kt @@ -111,28 +111,7 @@ abstract class DiffRecyclerAdapter(protected val context } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { - val holder = ItemViewHolder(getViewBinding(parent)) - - @Suppress("UNCHECKED_CAST") - registerListener(holder, (holder.binding as VB)) - - if (itemClickListener != null) { - holder.itemView.setOnClickListener { - getItem(holder.layoutPosition)?.let { - itemClickListener?.invoke(holder, it) - } - } - } - - if (itemLongClickListener != null) { - holder.itemView.onLongClick { - getItem(holder.layoutPosition)?.let { - itemLongClickListener?.invoke(holder, it) - } - } - } - - return holder + return ItemViewHolder(getViewBinding(parent)) } protected abstract fun getViewBinding(parent: ViewGroup): VB @@ -149,8 +128,29 @@ abstract class DiffRecyclerAdapter(protected val context position: Int, payloads: MutableList ) { + @Suppress("UNCHECKED_CAST") + registerListener(holder, (holder.binding as VB)) + registerItemListener(holder) getItem(holder.layoutPosition)?.let { - convert(holder, (holder.binding as VB), it, payloads) + convert(holder, holder.binding, it, payloads) + } + } + + private fun registerItemListener(holder: ItemViewHolder) { + if (itemClickListener != null) { + holder.itemView.setOnClickListener { + getItem(holder.layoutPosition)?.let { + itemClickListener?.invoke(holder, it) + } + } + } + + if (itemLongClickListener != null) { + holder.itemView.onLongClick { + getItem(holder.layoutPosition)?.let { + itemLongClickListener?.invoke(holder, it) + } + } } } diff --git a/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt b/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt index 84424f454..e00e169d2 100644 --- a/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt +++ b/app/src/main/java/io/legado/app/base/adapter/RecyclerAdapter.kt @@ -369,28 +369,7 @@ abstract class RecyclerAdapter(protected val context: Co } else -> { - val holder = ItemViewHolder(getViewBinding(parent)) - - @Suppress("UNCHECKED_CAST") - registerListener(holder, (holder.binding as VB)) - - if (itemClickListener != null) { - holder.itemView.setOnClickListener { - getItemByLayoutPosition(holder.layoutPosition)?.let { - itemClickListener?.invoke(holder, it) - } - } - } - - if (itemLongClickListener != null) { - holder.itemView.onLongClick { - getItemByLayoutPosition(holder.layoutPosition)?.let { - itemLongClickListener?.invoke(holder, it) - } - } - } - - holder + ItemViewHolder(getViewBinding(parent)) } } @@ -405,8 +384,29 @@ abstract class RecyclerAdapter(protected val context: Co payloads: MutableList ) { if (!isHeader(holder.layoutPosition) && !isFooter(holder.layoutPosition)) { - getItemByLayoutPosition(holder.layoutPosition)?.let { - convert(holder, (holder.binding as VB), it, payloads) + @Suppress("UNCHECKED_CAST") + registerListener(holder, (holder.binding as VB)) + registerItemListener(holder) + getItemByLayoutPosition(holder.layoutPosition)?.let { item -> + convert(holder, holder.binding, item, payloads) + } + } + } + + private fun registerItemListener(holder: ItemViewHolder) { + if (itemClickListener != null) { + holder.itemView.setOnClickListener { + getItemByLayoutPosition(holder.layoutPosition)?.let { + itemClickListener?.invoke(holder, it) + } + } + } + + if (itemLongClickListener != null) { + holder.itemView.onLongClick { + getItemByLayoutPosition(holder.layoutPosition)?.let { + itemLongClickListener?.invoke(holder, it) + } } } } diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BaseBooksAdapter.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BaseBooksAdapter.kt index 92b7065e4..fe7ac7ded 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BaseBooksAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BaseBooksAdapter.kt @@ -5,6 +5,7 @@ import androidx.core.os.bundleOf import androidx.recyclerview.widget.DiffUtil import androidx.viewbinding.ViewBinding import io.legado.app.base.adapter.DiffRecyclerAdapter +import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.data.entities.Book abstract class BaseBooksAdapter(context: Context) : @@ -65,6 +66,12 @@ abstract class BaseBooksAdapter(context: Context) : } + override fun onViewRecycled(holder: ItemViewHolder) { + super.onViewRecycled(holder) + holder.itemView.setOnClickListener(null) + holder.itemView.setOnLongClickListener(null) + } + fun notification(bookUrl: String) { getItems().forEachIndexed { i, it -> if (it.bookUrl == bookUrl) { diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksAdapterList.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksAdapterList.kt index d19a8f066..972f32bdc 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksAdapterList.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksAdapterList.kt @@ -17,8 +17,7 @@ class BooksAdapterList( context: Context, private val callBack: CallBack, private val lifecycle: Lifecycle -) : - BaseBooksAdapter(context) { +) : BaseBooksAdapter(context) { override fun getViewBinding(parent: ViewGroup): ItemBookshelfListBinding { return ItemBookshelfListBinding.inflate(inflater, parent, false) @@ -105,4 +104,4 @@ class BooksAdapterList( } } } -} \ No newline at end of file +}