This commit is contained in:
kunfei
2022-02-09 23:18:44 +08:00
parent d639b993a6
commit 5520ffc2fd
2 changed files with 17 additions and 11 deletions

View File

@@ -13,23 +13,26 @@ import io.legado.app.lib.theme.accentColor
import io.legado.app.utils.getCompatColor
import io.legado.app.utils.gone
import io.legado.app.utils.visible
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.launch
class ChapterListAdapter(context: Context, val callback: Callback) :
RecyclerAdapter<Pair<BookChapter, String>, ItemChapterListBinding>(context) {
class ChapterListAdapter(context: Context, val callback: Callback, private val scope: CoroutineScope) :
RecyclerAdapter<Pair<BookChapter, Deferred<String>>, ItemChapterListBinding>(context) {
val cacheFileNames = hashSetOf<String>()
val diffCallBack = object : DiffUtil.ItemCallback<Pair<BookChapter, String>>() {
val diffCallBack = object : DiffUtil.ItemCallback<Pair<BookChapter, Deferred<String>>>() {
override fun areItemsTheSame(
oldItem: Pair<BookChapter, String>,
newItem: Pair<BookChapter, String>
oldItem: Pair<BookChapter, Deferred<String>>,
newItem: Pair<BookChapter, Deferred<String>>
): Boolean {
return oldItem.first.index == newItem.first.index
}
override fun areContentsTheSame(
oldItem: Pair<BookChapter, String>,
newItem: Pair<BookChapter, String>
oldItem: Pair<BookChapter, Deferred<String>>,
newItem: Pair<BookChapter, Deferred<String>>
): Boolean {
return oldItem.first.bookUrl == newItem.first.bookUrl
&& oldItem.first.url == newItem.first.url
@@ -49,7 +52,7 @@ class ChapterListAdapter(context: Context, val callback: Callback) :
override fun convert(
holder: ItemViewHolder,
binding: ItemChapterListBinding,
item: Pair<BookChapter, String>,
item: Pair<BookChapter, Deferred<String>>,
payloads: MutableList<Any>
) {
binding.run {
@@ -61,7 +64,9 @@ class ChapterListAdapter(context: Context, val callback: Callback) :
} else {
tvChapterName.setTextColor(context.getCompatColor(R.color.primaryText))
}
tvChapterName.text = item.second
scope.launch {
tvChapterName.text = item.second.await()
}
if (item.first.isVolume) {
//卷名,如第一卷 突出显示
tvChapterItem.setBackgroundColor(context.getCompatColor(R.color.btn_bg_press))

View File

@@ -25,6 +25,7 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.Job
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -34,7 +35,7 @@ class ChapterListFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_chapt
override val viewModel by activityViewModels<TocViewModel>()
private val binding by viewBinding(FragmentChapterListBinding::bind)
private val mLayoutManager by lazy { UpLinearLayoutManager(requireContext()) }
private val adapter by lazy { ChapterListAdapter(requireContext(), this) }
private val adapter by lazy { ChapterListAdapter(requireContext(), this, this) }
private var durChapterIndex = 0
private var tocFlowJob: Job? = null
@@ -118,7 +119,7 @@ class ChapterListFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_chapt
}
val useReplace = viewModel.bookData.value?.getUseReplaceRule() == true
it.map { chapter ->
Pair(chapter, chapter.getDisplayTitle(replaces, useReplace))
Pair(chapter, async { chapter.getDisplayTitle(replaces, useReplace) })
}
}
adapter.setItems(data, adapter.diffCallBack)