From f354b86d1d8ec6cfa8f4fe49068b47b0f0348f22 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Mon, 6 Mar 2023 05:21:04 +0800 Subject: [PATCH] Implement partial bind in DownloadAdapter --- .../hippo/ehviewer/ui/scene/DownloadsScene.kt | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt index e2641e199..e7b5e4f7f 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt @@ -599,7 +599,7 @@ class DownloadsScene : BaseToolbarScene(), DownloadInfoListener, OnClickFabListe } val index = mList!!.indexOf(info) if (index >= 0 && mAdapter != null) { - mAdapter!!.notifyItemChanged(index) + mAdapter!!.notifyItemChanged(index, PAYLOAD_STATE) } } @@ -861,7 +861,7 @@ class DownloadsScene : BaseToolbarScene(), DownloadInfoListener, OnClickFabListe bindForState(info) } - private fun bindForState(info: DownloadInfo) { + fun bindForState(info: DownloadInfo) { val context = context ?: return when (info.state) { DownloadInfo.STATE_NONE -> bindState( @@ -973,11 +973,23 @@ class DownloadsScene : BaseToolbarScene(), DownloadInfoListener, OnClickFabListe } override fun onBindViewHolder(holder: DownloadHolder, position: Int) { - if (mList == null) { - return + mList?.let { holder.bind(it[position]) } + } + + override fun onBindViewHolder( + holder: DownloadHolder, + position: Int, + payloads: MutableList + ) { + payloads.forEach { payload -> + when (payload) { + PAYLOAD_STATE -> { + mList?.let { holder.bindForState(it[position]) } + return + } + } } - val info = mList!![position] - holder.bind(info) + super.onBindViewHolder(holder, position, payloads) } override fun getItemCount(): Int { @@ -1190,5 +1202,6 @@ class DownloadsScene : BaseToolbarScene(), DownloadInfoListener, OnClickFabListe private val TAG = DownloadsScene::class.java.simpleName private const val KEY_LABEL = "label" private const val LABEL_OFFSET = 2 + private const val PAYLOAD_STATE = 0 } } \ No newline at end of file